JPA 注释中的 inverse=true
Posted
技术标签:
【中文标题】JPA 注释中的 inverse=true【英文标题】:inverse=true in JPA annotations 【发布时间】:2011-06-19 09:56:01 【问题描述】:在我的应用程序中,我使用 JPA 2.0 和 Hibernate 作为持久性提供程序。我在两个实体之间有一对多的关系(使用@JoinColumn
而不是@JoinTable
)。我想知道如何在 JPA 注释中指定 inverse=true
(在 hbm.xml
中指定)以反转关系所有者。
谢谢。
【问题讨论】:
你到底想达到什么目标? 如您所知,反向控制关系中的哪个实体更新外键。 ***.com/questions/4439756/…。在我的一对多关系中,我想指定这一点。 【参考方案1】:通过使用 @OneToMany 或 @ManyToMany 的 mappedBy 属性,我们可以在注释方面启用 inverse="true"。 例如 Branch 和 Staff 具有一对多的关系
@Entity
@Table(name = "branch")
public class Branch implements Serializable
@Id
@Column(name = "branch_no")
@GeneratedValue(strategy = GenerationType.AUTO)
protected int branchNo;
@Column(name = "branch_name")
protected String branchName;
@OneToMany(mappedBy = "branch") // this association is mapped by branch attribute of Staff, so ignore this association
protected Set<Staff> staffSet;
// setters and getters
@Entity
@Table(name = "staff")
public class Staff implements Serializable
@Id
@Column(name = "staff_no")
@GeneratedValue(strategy = GenerationType.AUTO)
protected int staffNo;
@Column(name = "full_name")
protected String fullName;
@ManyToOne
@JoinColumn(name = "branch_no", nullable = true)
protected Branch branch;
// setters and getters
【讨论】:
【参考方案2】:属性mappedBy
表示这一边的实体是关系的逆,所有者驻留在另一实体。其他实体将具有@JoinColumn
注释和@ManyToOne
关系。因此我认为 inverse = true 与@ManyToOne
注释相同。
也 inverse=”true” 表示这是处理关系的关系所有者。
【讨论】:
【参考方案3】:我找到了答案。 @OneToMany 注解的 mappedBy 属性的行为与 xml 文件中的 inverse = true 相同。
【讨论】:
另外,这个问题有更多信息:***.com/questions/11938253/jpa-joincolumn-vs-mappedby。以上是关于JPA 注释中的 inverse=true的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse 中 JPA 项目的问题 - 注释类 @Entity 中的错误:无法解决表“xxx”
使用带有 Hibernate 的 JPA 注释来描述外键仅在子表中的 @OneToMany 关系
在Spring Boot应用程序中的模型类中同时使用JPA和MongoDB注释的问题