JPA:确定关系的归属方
使用Java Persistence API(JPA)時(shí),通常需要在兩個(gè)實(shí)體之間創(chuàng)建關(guān)系。 這些關(guān)系是通過(guò)使用外鍵在數(shù)據(jù)模型(例如數(shù)據(jù)庫(kù))中定義的,而在我們的對(duì)象模型(例如Java)中則使用注釋來(lái)定義關(guān)聯(lián),以定義關(guān)聯(lián)。 在對(duì)象模型中定義關(guān)系或關(guān)聯(lián)時(shí),一項(xiàng)常見(jiàn)的任務(wù)是識(shí)別關(guān)系的擁有方。 標(biāo)識(shí)關(guān)系中的擁有實(shí)體很重要,因?yàn)閾碛蟹酵ǔJ?#xff08;如果不是總是)必須在@JoinColumn批注中指定的地方。 為了說(shuō)明實(shí)體擁有方的概念,我們將使用數(shù)據(jù)模型來(lái)支持此討論。
讓我們分析這個(gè)簡(jiǎn)單的模型,該模型描述了兩個(gè)表POST和SERIES之間的關(guān)系。 在這種關(guān)系中,POST表存儲(chǔ)一個(gè)博客帖子,該博客帖子可以是SERIES表代表的一系列帖子的一部分。 在數(shù)據(jù)模型中,POST表上的SERIES_ID外鍵將POST與相應(yīng)的SERIES關(guān)聯(lián)。 此外鍵指示哪個(gè)實(shí)體擁有該關(guān)系。 讓我們?cè)趯?duì)象模型中添加這些實(shí)體,并在它們之間建立簡(jiǎn)單的單向關(guān)系。 一,系列實(shí)體:
@Entity @Table(name="SERIES") public class Series {@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="SERIES_ID")private Integer seriesId;@Column(name="TITLE")private String title;//Accessors... }和Post實(shí)體:
@Entity @Table(name="POST") public class Post {@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="POST_ID")Integer postId;@Column(name="TITLE")String title;@Column(name="POST_DATE")Date postDate;@ManyToOne@JoinColumn(name="SERIES_ID")private Series series;//Accessors... }在Post實(shí)體中,在字段系列上方指定@JoinColumn批注,以表示用于標(biāo)識(shí)帖子的各個(gè)Series的外鍵。 @JoinColumn批注放置在Post實(shí)體上,因?yàn)樗顷P(guān)系中的擁有實(shí)體。 通過(guò)引用數(shù)據(jù)模型中的兩個(gè)實(shí)體并標(biāo)識(shí)包含外鍵的實(shí)體來(lái)確定實(shí)體的擁有方。 如果Post和Series實(shí)體之間的關(guān)系要求是雙向的,則意味著Post實(shí)體應(yīng)該可以從Series進(jìn)行訪問(wèn),則關(guān)系(Series)的反面必須使用@OneToMany進(jìn)行注釋,并定義了mappingBy元素。 mappingBy元素應(yīng)指向關(guān)系(Post)的擁有方的字段,該字段指定用于關(guān)聯(lián)實(shí)體的@JoinColumn。
Series實(shí)體的以下重構(gòu)突出顯示了用于建立雙向關(guān)系的映射:
@Entity @Table(name="SERIES") public class Series {@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name="SERIES_ID")private Integer seriesId;@Column(name="TITLE")private String title;@OneToMany(mappedBy="series")private List posts = new ArrayList();//Accessors... }總之,在JPA持久性單元內(nèi)定義的關(guān)系中確定擁有實(shí)體時(shí),重要的是查閱數(shù)據(jù)模型以查找數(shù)據(jù)模型中的各個(gè)表中哪些實(shí)體包含外鍵。
參考: JPA:在ToThought博客上,由我們的JCG合作伙伴 Kevin Bowersox 確定關(guān)系的歸屬方 。翻譯自: https://www.javacodegeeks.com/2013/04/jpa-determining-the-owning-side-of-a-relationship.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的JPA:确定关系的归属方的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 龙芯3a3000是什么架构(龙芯3a30
- 下一篇: 云闪付转账怎么每次都要验证码?