You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring JPA+PostgreSQL:单条记录存储多字符串错误答案列表的最佳方案?

问题描述

我正在开发一个选择题生成门户,前端会发送包含Question对象数组的JSON数据,每个Question对象包含:问题内容、正确答案、错误答案列表(最少2个最多4个)、CourseSpecifics对象ID。我需要将错误答案字符串列表存储在PostgreSQL的单条记录中。当前我的实体类代码如下:

@Entity
@Table(name = "questions")
public class Questions {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;

@Column(name ="question",nullable = false)
String question;

@Column(name ="answer",nullable = false)
String answer;

@Column(name ="wrong_answers",nullable = false)
List<String> wrongAnswers;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name ="fk_specifics",nullable = false)
CourseSpecifics fkSpecifics;

}

我对其中@Column(name ="wrong_answers",nullable = false) List<String> wrongAnswers;这部分存在疑问,目前我使用spring.jpa.hibernate.ddl-auto=create自动生成数据库结构(非强制要求)。我的问题是:

  1. 此场景下,wrongAnswers在Spring中应使用什么最佳数据类型?
  2. 对应上述数据类型,PostgreSQL数据库应使用什么最佳列定义?

回答

1. Spring中的最佳数据类型

保持使用List<String>即可,这是Java中处理字符串集合最常用、最灵活的类型。但需要修改注解配置,让Hibernate正确识别并映射到PostgreSQL的数组类型:

@Column(name = "wrong_answers", nullable = false, columnDefinition = "text[]")
private List<String> wrongAnswers;

如果偏好数组类型,也可以用String[],但List<String>在Java业务代码中更易操作(比如添加、删除元素),推荐优先使用。

2. PostgreSQL对应的最佳列定义

直接使用text[]类型(可变长度字符串数组),这是PostgreSQL中存储字符串列表的原生方案,既符合你“单条记录存储”的需求,又能直接和Java的集合类型映射。如果你的错误答案有明确的长度限制,也可以用varchar(你的最大长度)[],但text[]更灵活,无需预先限制字符串长度,适合大多数场景。

手动创建表的SQL示例:

CREATE TABLE questions (
    id SERIAL PRIMARY KEY,
    question TEXT NOT NULL,
    answer TEXT NOT NULL,
    wrong_answers TEXT[] NOT NULL,
    fk_specifics INTEGER NOT NULL REFERENCES course_specifics(id)
);

内容的提问来源于stack exchange,提问作者asdrubalo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:30:38