首页 >Java >java教程 >JPA 中的 JoinColumn 与mappedBy:何时使用哪个注释?

JPA 中的 JoinColumn 与mappedBy:何时使用哪个注释?

DDD
DDD原创
2024-12-21 19:11:11580浏览

JoinColumn vs. mappedBy in JPA: When to Use Which Annotation?

了解 JPA 中 JoinColumn 和mappedBy 之间的区别

在 Java Persistence API (JPA) 中,管理实体之间的关系至关重要。建立关系的关键注解是@JoinColumn和@mappedBy。

当使用@OneToMany注解建立双向关系时,需要区分关系的拥有者和反向者。在拥有方使用@JoinColumn 表示引用的表具有对应表的外键列。相反,@mappedBy 表示反面,意味着另一个实体充当关系的所有者,并且有一个使用 @mappedBy 引用该实体的映射列。

代码示例

考虑以下代码示例:

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY)
    @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")
    private List<Branch> branches;
    ...
}
@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, 
    mappedBy = "companyIdRef")
    private List<Branch> branches;
    ...
}

在第一个例如,公司是所有者,分支机构通过外键列companyIdRef引用。在第二个示例中,Company 是关系的反面,通过映射列 companyIdRef 引用分支。

正确的注释用法

对于中提供的代码问题,正确的注释应该是:

@Entity
public class Company {
    @OneToMany(mappedBy = "company",
               orphanRemoval = true,
               fetch = FetchType.LAZY,
               cascade = CascadeType.ALL)
    private List<Branch> branches;
}

@Entity
public class Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "companyId")
    private Company company;
}

通过使用这些注释,Company 和 Company 之间建立了双向关系分公司,以公司为反方,分公司为拥有方。

以上是JPA 中的 JoinColumn 与mappedBy:何时使用哪个注释?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn