将 JPA 2.1 中的 List 或 Set 用于同一个表中的多个列
Posted
技术标签:
【中文标题】将 JPA 2.1 中的 List 或 Set 用于同一个表中的多个列【英文标题】:Using List or Set in JPA 2.1 for multiple columns in same table 【发布时间】:2014-05-09 07:00:53 【问题描述】:我是 JPA 的新手。 我正在使用 Wicket-Spring-Hibernate-JPA 构建示例 maven 项目。
我正在使用 Hibernate EntityManager:v4.3.5.Final。 我正在使用 JPA:v2.1-api。我正在使用数据库 mysql: v5.6。
当我编写模型类时,我想将表的多个列与模型类中的一个元素映射为 List 或 Set。
Database Table Name: QUESTION_MAIN
Column Name : Type : PK
QID : int : PK
QTYPE : varchar
QUESTION : varchar
OPTION1 : varchar
OPTION2 : varchar
OPTION3 : varchar
OPTION4 : varchar
OPTION5 : varchar
OPTION6 : varchar
注意:假设最多有 6 个选项可供提问。
现在在模型类中,我想这样表示:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="QUESTION_MAIN")
public class Question
@Id
@GeneratedValue
@Column(name="QID")
private Long id;
@Column(name="QTYPE")
private String quest_type;
@Column(name="QUESTION")
private String question;
//TODO: Create List or Set for OPTIONS
对于代码中的行:
//TODO: Create List or Set for OPTIONS
我想在这里为选项列创建一个列表或集合。
请让我知道任何可能的方法。 或者,如果有人知道这种情况,请提供任何替代方案。
你好路易吉, 我不确定您提供的上述链接能否解决我的问题。我仍然试图理解该链接中提供的选项。 我正在寻找的是,我能否在我们的 Bean 类中创建一个列表或一组列名作为一个元素(使用 JPA 注释)。
【问题讨论】:
Is it possible to dynamically define column names in Hibernate / JPA? 的可能重复项 【参考方案1】:至少,需要将实体属性映射到表列。 所以只需要实体中每个 OPTIONS 的属性(变量、getter&setter);
...
@Column(name="OPTION") //here OPTION1, OPTION2, and so on
private String option;
...
另一种方法是为 OPTION 创建一个单独的表和一个实体来满足您的要求。
从Question
实体可以与Option
实体建立关系(one-to-many
单向或双向关系 - 以下示例使用bidirectional
)
@Entity
@Table(name="OPTION")
public class Option
@Id
@GeneratedValue
@Column(name="") //column name in table
private Long id;
@Column(name="")
private String optionTitle; //can use enum for OPTION1, OPTION2, and so on
@Column(name="")
private String optionValue;
@ManyToOne
@JoinColumn(name = "QUESTION_ID", nullable = false) //QUESTION_ID (whatever you defined foreign key column in Option table)
private Question question;
..
//constructor, getters & setters
在 Question 实体中,为选项集合添加属性(List、Set 和任何您需要的可排序集合)
@OneToMany(mappedBy = "question")
private List<Option> optionList = new ArrayList<Option>();
【讨论】:
谢谢。我将尝试使用您提供的其他选项。这将有助于解决问题。以上是关于将 JPA 2.1 中的 List 或 Set 用于同一个表中的多个列的主要内容,如果未能解决你的问题,请参考以下文章