JPA JoinColumn vs mappedBy
生活随笔
收集整理的這篇文章主要介紹了
JPA JoinColumn vs mappedBy
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題:JPA JoinColumn vs 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;... }回答一
mappedBy注解按道理應該用于雙向關系中的父類(company類)里面的。在這種情況下,它應該用在Company類指向它子類(Branch類)的成員變量’company’
JoinColumn注解通常被用于說明映射列(用于連接一個實體關系的),這個注解可以用在任何類里面(父類和子類),但是按道理來說只能用在一類(要么是父類要么是子類),這里的例子中,我是用在了雙向關系里的子類那里,去顯示出子類(Branch類)里面的一個外鍵
下面是一個例子:
父類,Company
子類,Branch
@Entity public class Branch {private int branchId;private String branchName;private Company company;@Id@GeneratedValue@Column(name="BRANCH_ID")public int getBranchId() {return branchId;}public void setBranchId(int branchId) {this.branchId = branchId;}@Column(name="BRANCH_NAME")public String getBranchName() {return branchName;}public void setBranchName(String branchName) {this.branchName = branchName;}@ManyToOne(fetch=FetchType.LAZY)@JoinColumn(name="COMPANY_ID")public Company getCompany() {return company;}public void setCompany(Company company) {this.company = company;}}回答二
@JoinColumn指明了這個實體是關系的擁有者(對應著一個擁有外鍵的表和它的參照表)。但是mappedBy屬性指明的是在這一邊的實體是一個逆向的關系,而擁有者是在另一個實體里面的。這也意味著你可以在這個類里面使用到你標注了mappedBy其他表(完全雙向關系)
另外,對于問題中的代碼來說,正確的注解應該是下面這樣的:
@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; }文章翻譯自Stack Overflow:https://stackoverflow.com/questions/11938253/jpa-joincolumn-vs-mappedby
總結
以上是生活随笔為你收集整理的JPA JoinColumn vs mappedBy的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到四条狗是怎么回事
- 下一篇: 梦到去广州了是什么意思