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

我正在尝试使用 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
}

另外还有一个表 UserResponse,它将 userId 和 queId 作为上述两个表的外键。

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

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

我怎么才能做到呢?

170528 次浏览

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

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

@JoinColumn(name="reference_column_name")注释可以用在从其他实体引用的类的属性或字段之上。

答案有很多,而且都是正确的,但不幸的是,没有一个答案是清楚的。

以下内容也适用于非主键映射。

假设父表 A 有列1 以及另一个表 B,其中第2列引用了第1列:

@ManyToOne
@JoinColumn(name = "TableBColumn", referencedColumnName = "TableAColumn")
private TableA session_UserName;

Enter image description here

@ManyToOne
@JoinColumn(name = "bok_aut_id", referencedColumnName = "aut_id")
private Author bok_aut_id;