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自动生成数据库结构(非强制要求)。我的问题是:
- 此场景下,
wrongAnswers在Spring中应使用什么最佳数据类型? - 对应上述数据类型,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
相关产品推荐
相关产品推荐

