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

如何使用Hibernate注释标记外键约束?

庄瀚玥
2023-03-14

我正在尝试使用Hibernate注释为我的数据库表编写一个模型类。

我有两个表,每个表都有一个主键用户和问题。

@Entity
@Table(name="USER")
public class User
{
    @Id
    @Column(name="user_id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    @Column(name="username")
    private String username;

    // Getter and setter
}

问题桌。

@Entity
@Table(name="QUESTION")
public class Questions extends BaseEntity{

    @Id
    @Column(name="question_id")
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @Column(name="question_text")
    private String question_text;

    // Getter and setter
}

并且我还有一个表UserAnswer,它有userId和questionId作为来自上面两个表的外键。

但我无法找到如何在UserAnswer表中引用这些约束。

@Entity
@Table(name="UserAnswer ")
public class UserAnswer
{
    @Column(name="user_id")
    private User user;

    //@ManyToMany
    @Column(name="question_id")
    private Questions questions ;

    @Column(name="response")
    private String response;

    // Getter and setter
}

我怎样才能做到这一点呢?

共有1个答案

齐献
2023-03-14

@column不是适当的批注。您不希望在一个列中存储整个用户或问题。您希望在实体之间创建关联。首先将questions重命名为questions,因为一个实例表示一个问题,而不是几个问题。然后创建关联:

@Entity
@Table(name = "UserAnswer")
public class UserAnswer {

    // this entity needs an ID:
    @Id
    @Column(name="useranswer_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToOne
    @JoinColumn(name = "question_id")
    private Question question;

    @Column(name = "response")
    private String response;

    //getter and setter 
}

Hibernate文档解释了这一点。读一下。并阅读注释的javadoc。

 类似资料:
  • 问题内容: 我正在尝试使用Hibernate注释为我的数据库表编写模型类。 我有两个表,每个表都有一个主键User和Question。 问题表。 我还有一个表UserAnswer,其中有来自上面两个表的userId和QuestionId作为外键。 但是我无法在UserAnswer表中找到如何引用这些约束的方法。 我该如何实现? 问题答案: 不是适当的注释。您不想在列中存储整个用户或问题。您要在实体

  • 我有一个2个实体和,其中引用。这是一个多(子)对一个(父)关系,定义如下: 和 Micronaut Data在创建架构时执行以下SQL查询: 创建一个表<code>parent_entity</code>(<code>id</code>BIGINT不为空,<code>name</code>VARCHAR(255)不为空); 创建表< code > child _ entity (< code >

  • //获取和设置 以下是我给用户的POJO:

  • 问题内容: 我试图用来向没有定义主键的表中插入数据。 但是事实是该表的两个字段一起在表中是唯一的。我如何使用hibernate注释实现相同的目的? 这是我的代码。 问题答案: 您可以使用和创建复合键,并将其与您的实体进行映射。例如: 然后在Java代码中使用常规方式来持久化实体。 参考:http : //docs.jboss.org/hibernate/annotations/3.5/refere

  • hibernate如何生成外键约束名称? 如果我不定义一个名字,Hibernate会生成这样的东西 这个名字是如何产生的?可能是从字段名散列或类似的内容?我需要知道名称是否在所有实例上都相等。

  • 问题内容: 所以我对数据库中的某些表进行了反向工程,当我尝试将对象保存到数据库中时,出现以下错误: 初始SessionFactory创建失败。org.hibernate.AnnotationException:从com.mycode.Account引用com.mycode.Block的外键具有错误的列数。在线程“ main”中应为2异常java.lang.ExceptionInInitialize