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@ManyToManyma​​ppedBy 属性,我们可以在注释方面启用 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注释的问题

JPA Hibernate - 数据库和注释中的级联删除

数据库如何通过 Hibernate 与 jpa 注释的 pojo 类交互?

如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?