[英]Using List or Set in JPA 2.1 for multiple columns in same table
我是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
我想在此处为选项列创建一个列表或集合。
请让我知道任何可能的方式。 或者,如果有人知道这种情况,请提供任何替代方法。
您好Luiggi,我不确定您提供的上述链接是否可以解决我的问题。 我仍然试图理解该链接中提供的选项。 我正在寻找的是,我能否在Bean类中(作为JPA注释)将一个ListName或Set ColumnNames创建为一个元素。
至少需要将实体属性映射到表列。 因此,只需为实体中的每个OPTIONS需要属性(变量,getter和setter)即可;
...
@Column(name="OPTION") //here OPTION1, OPTION2, and so on
private String option;
...
另一种方法是为OPTION创建一个单独的表和一个实体,以满足您的需求。 From 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
}
在问题实体中,为选项集合添加属性(根据需要列出,设置和任何可排序的集合)
@OneToMany(mappedBy = "question")
private List<Option> optionList = new ArrayList<Option>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.