在同一个表中使用列表或在JPA 2.1中设置多列 [英] Using List or Set in JPA 2.1 for multiple columns in same table

查看:98
本文介绍了在同一个表中使用列表或在JPA 2.1中设置多列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是JPA新手。
我正在使用Wicket-Spring-Hibernate-JPA构建示例maven项目。

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

在编写模型类时,我希望将表中的多个列与模型类中的元素映射为List或Set数据库表名:QUESTION_MAIN
列名:类型:PK
QID:int:PK

$ b

  b $ b 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)
私人长ID;

@Column(name =QTYPE)
private String quest_type;

@Column(name =QUESTION)
私人字符串问题;
$ b $ // TODO:为选项创建列表或设置
}



<对于代码行:

  // TODO:为选项创建列表或设置

我想为这里的选项列创建一个List或Set。



请让我知道任何可能的方式。
或者如果有人知道这种情况,请提供任何替代方案。






Hello Luiggi,
我不确定您提供的上述链接是否解决了我的问题。我仍然试图理解该链接中提供的选项。
我在寻找的是,我可以创建一个ListNames或一组ColumnNames作为Bean类中的一个元素(使用JPA Annotations)。

解决方案

至少,需要将实体属性映射到表列。
因此,只需要为实体中的每个OPTIONS设置属性(变量,getter和setter);

  ... 
@Column(name =OPTION)//这里是OPTION1,OPTION2,等等
private String option;
...

另一种方法是为OPTION创建一个单独的表和一个实体满足您的要求。
问题实体可以与选项实体(许多单向或双向关系 - 下面是使用的示例双向

  @Entity 
@Table(name =OPTION)
public class Option {
@Id
@GeneratedValue
@Column(name = )//表中的列名
私有长ID;

@Column(name =)
private String optionTitle; //可以为OPTION1,OPTION2等使用枚举

@Column(name =)
private String optionValue;

@ManyToOne
@JoinColumn(name =QUESTION_ID,nullable = false)// QUESTION_ID(无论您在Option表中定义了外键列)
private问题问题;

..
//构造函数,getters& setters





$ b在问题实体中,为选项集合(List,Set和any)添加属性)

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


I am new with JPA. I am building sample maven project with Wicket-Spring-Hibernate-JPA.

I am using Hibernate EntityManager: v4.3.5.Final. I am using JPA: v2.1-api. I am using database 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.

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.

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. 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).

解决方案

At least, need to map entity property to table column. So simply need property (variable, getter&setter) for each OPTIONS in entity;

...
@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. From Question entity can do relationship to Option entity (one-to-many uni or bidirectional relationship - below example used 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>();

这篇关于在同一个表中使用列表或在JPA 2.1中设置多列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆