当前位置: 首页 > 知识库问答 >
问题:

在JPA 2.1中对同一表中的多列使用List或Set

萧宏远
2023-03-14

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

共有1个答案

蓬高谊
2023-03-14

至少,需要将实体属性映射到表列。所以只需要属性(变量,getter

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

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

@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>();
 类似资料:
  • 问题内容: 我有一个班级用户。用户可以与许多其他用户成为朋友。这种关系是相互的。如果A是B的朋友,那么B是A的朋友。我也希望每个关系都存储其他数据,例如两个用户成为朋友的日期。因此,这是同一表上具有多列的多对多关系。我知道应该创建一个中产阶级友谊(包含两个用户ID和日期列)。但是我在将其与Hibernate映射时做得不够。使我停滞不前的是映射到了同一张表。如果多对多关系是在两个不同的表之间,则可以

  • 要删除表的列,请在ALTER table语句中使用drop column子句,如下所示: 错误:“rs”行或其附近出现语法错误1:ALTER TABLE res_partner rs

  • 问题内容: 我想使用链接表在Hibernate中映射多对多。我有两个类,例如Parent和Child类: 我用三列的链接表(link_table) ,和。该数据库是SQL Server,并且ID类型是uniqueidentifier。因此,我通常将guid用于id字段。 你怎么能实现这个使用 标签,如果这是要使用正确的标签?您知道有什么好的文档可以做到这一点吗? 我目前正在获取Constraint

  • 我是java新手,正在努力克服它。我有类似(< code>String URL,int Score)的数据,我想在数组列表中实现它。我研究了如何在< code>ArrayList或< code>LinkedList中实现多种类型的变量,发现解决方案是从超类创建子类,我创建了这个子类: 我的超级班是: 当我尝试使用添加对象时,我遇到了错误?该错误说: 类型ArrayList中的add(int,MyS

  • 我想运行一个mysql查询,从一个表中选择所有行,,其中列的值在另一列()的所有值中的任何位置都不存在。 以下是我的表格的简化版本,其中包含以下内容: 我的问题是: 在本例中,我希望选择标题为和的行,但我的查询没有返回任何行。 以下是表格结构:

  • 问题内容: 我是Hibernate的新手,必须支持使用Hibernate的现有应用程序。这是一个纯报表应用程序-无需插入/更新/删除-仅选择 我可以看到在同一类的多个字段中使用了@Id注释的现有POJO对象 我的理解是,对于复合主键-您需要使用@Embeddable和@EmbeddedId 但是,这没有在我的课程中定义,奇怪的是代码可以编译并正常运行 这是我的代码的示例: 在pojo中还有更多字段