繁体   English   中英

在JPA 2.1中对同一表中的多个列使用列表或集合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM