一尘不染

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

hibernate

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

我有两个表,每个表都有一个主键User和Question。

@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
}

我该如何实现?


阅读 242

收藏
2020-06-20

共1个答案

一尘不染

@Column不是适当的注释。您不想在列中存储整个用户或问题。您要在实体之间创建关联。首先重命名QuestionsQuestion,因为一个实例代表一个问题,而不是多个问题。然后创建关联:

@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。

2020-06-20