简体   繁体   English

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

[英]Using List or Set in JPA 2.1 for multiple columns in same table

I am new with JPA. 我是JPA的新手。 I am building sample maven project with Wicket-Spring-Hibernate-JPA. 我正在使用Wicket-Spring-Hibernate-JPA构建示例Maven项目。

I am using Hibernate EntityManager: v4.3.5.Final. 我正在使用Hibernate EntityManager:v4.3.5.Final。 I am using JPA: v2.1-api. 我正在使用JPA:v2.1-api。 I am using database mySql: v5.6. 我正在使用数据库mySql:v5.6。

When I am writing a model class, I want to map tables multiple columns with an element in model class as List or Set. 当我编写模型类时,我想用模型类中的元素(如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

Note: Assuming that there will be maximum 6 options to question. 注意:假设最多有6个问题要提问。

Now in model class, I want to represent this like: 现在在模型类中,我想这样表示:

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
}

For the line in code: 对于代码行:

//TODO: Create List or Set for OPTIONS

I want to create a List or Set for the options columns here. 我想在此处为选项列创建一个列表或集合。

Please do let me know any possible way for this. 请让我知道任何可能的方式。 Or if anyone aware of such situation, provide any alternative to this. 或者,如果有人知道这种情况,请提供任何替代方法。


Hello Luiggi, I am not sure the above link you provided solves my issue. 您好Luiggi,我不确定您提供的上述链接是否可以解决我的问题。 Still I am trying to understand the option provided in that link. 我仍然试图理解该链接中提供的选项。 What I am looking for is, can I be able to create a List or Set of ColumnNames as one element in our Bean Class (with JPA Annotations). 我正在寻找的是,我能否在Bean类中(作为JPA注释)将一个ListName或Set ColumnNames创建为一个元素。

At least, need to map entity property to table column. 至少需要将实体属性映射到表列。 So simply need property (variable, getter&setter) for each OPTIONS in entity; 因此,只需为实体中的每个OPTIONS需要属性(变量,getter和setter)即可;

...
@Column(name="OPTION") //here OPTION1, OPTION2, and so on
private String option;
...

Another way is to create a separate table and an entity for OPTION to fulfill your requirement. 另一种方法是为OPTION创建一个单独的表和一个实体,以满足您的需求。 From Question entity can do relationship to Option entity ( one-to-many uni or bidirectional relationship - below example used bidirectional ) 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
}

In Question entity, add property for option collection (List, Set and any sortable collection as you needed) 在问题实体中,为选项集合添加属性(根据需要列出,设置和任何可排序的集合)

@OneToMany(mappedBy = "question")
private List<Option> optionList = new ArrayList<Option>();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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