首頁 >Java >java教程 >JPA 中的 JoinColumn 與mappedBy:何時使用哪個註解?

JPA 中的 JoinColumn 與mappedBy:何時使用哪個註解?

DDD
DDD原創
2024-12-21 19:11:11581瀏覽

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