日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JPA JoinColumn vs mappedBy

發布時間:2023/11/29 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

@Entity public class Company {private int companyId;private String companyName;private List<Branch> branches;@Id@GeneratedValue@Column(name="COMPANY_ID")public int getCompanyId() {return companyId;}public void setCompanyId(int companyId) {this.companyId = companyId;}@Column(name="COMPANY_NAME")public String getCompanyName() {return companyName;}public void setCompanyName(String companyName) {this.companyName = companyName;}@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy="company")public List<Branch> getBranches() {return branches;}public void setBranches(List<Branch> branches) {this.branches = branches;}}

子類,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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。