0

我是 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 注释)。

4

1 回答 1

0

至少,需要将实体属性映射到表列。所以只需要实体中每个 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
}

在问题实体中,为选项集合添加属性(列表、集合和任何您需要的可排序集合)

@OneToMany(mappedBy = "question")
private List<Option> optionList = new ArrayList<Option>();
于 2014-05-09T08:32:03.060 回答