如何使用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 }
请帮我实现这个目标? 提前致谢。
@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。
@Join column(name="reference_column_name")
注释可以在从某个其他实体引用的类的属性或字段上方使用。
答案很多,而且都是正确的。 但不幸的是,他们都没有明确的解释。 这也适用于非主键映射。
假设我们有父表-A与列1和另一个表-B与列2引用列1
@ManyToOne @JoinColumn(name = "TableBColumn", referencedColumnName = "TableAColumn") private TableA session_UserName;
@ManyToOne @JoinColumn(name = "bok_aut_id", referencedColumnName = "aut_id") private Author bok_aut_id;
- 自JPA 2.1以来如何命名ManyToOne引用的外键约束?
- 禁止使用Hibernate Envers为实体创建_AUD表?
- 如何扫描Hibernate实体的包而不是使用hbm.xml?
- 如何在Spring / EJB / Mockito …代理上处理内部调用?
- 我可以在Hibernate管理的表中添加“ON DELETE CASCADE”吗?
- Hibernate NoSuchFieldError INSTANCE但只适用于Struts 1?
- 多个@ManyToOne字段指向JPA / Hibernate中的同一实体
- jpa独立自定义类型映射/ javax.persistence.x替代org.hibernate.annotations.Type和org.hibernate.annotations.TypeDef
- 使用compositeKey的Hibernate示例OneToMany