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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

主键能否@onetoone_双向@OneToOne主键关联

發(fā)布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主键能否@onetoone_双向@OneToOne主键关联 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

主鍵能否@onetoone

現(xiàn)在該繼續(xù)有關Hibernate的文章了。 最后一個致力于單向@OneToOne關聯(lián) 。 因此,今天我將向您展示如何獲取雙向@OneTonOne主鍵關聯(lián) 。 本教程中基于前一篇文章的示例。 讓我們開始吧。

我將使用以前創(chuàng)建的相同表。 為了建立雙向一對一關聯(lián),我需要更新兩個POJO和保存過程的方式。 讓我們考慮一個新版本的Author類:

import javax.persistence.*;@Entity @Table(name='authors') public class Author {@Id@GeneratedValueprivate Integer id;private String name;@OneToOne(mappedBy='author', cascade=CascadeType.ALL)private Biography biography;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Biography getBiography() {return biography;}public void setBiography(Biography biography) {this.biography = biography;}}

變化很小。 我剛剛從傳記字段中刪除了@PrimaryKeyJoinColumn。 在雙向關聯(lián)中,出現(xiàn)關聯(lián)的兩個方面- 擁有和反向 。 對于一對一的雙向關系,擁有方對應于包含相應外鍵的方。 在我們的情況下,擁有方是Author類。 讓我們繼續(xù)。

引用JPA 2規(guī)范:

雙向關系的反面必須通過使用OneToOne,OneToMany或ManyToMany批注的mappingBy元素來引用其擁有的一面。 mapledBy元素指定實體中作為關系所有者的屬性或字段。

本示例的反面是Biography類。 與Author類相比,它需要進行更多必要的更改。

import javax.persistence.*;import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter;@Entity @Table(name='biographies') public class Biography {@Id@Column(name='author_id')@GeneratedValue(generator='gen')@GenericGenerator(name='gen', strategy='foreign', parameters=@Parameter(name='property', value='author'))private Integer authorId;private String information;@OneToOne@PrimaryKeyJoinColumnprivate Author author;public Author getAuthor() {return author;}public void setAuthor(Author author) {this.author = author;}public Integer getAuthorId() {return authorId;}public void setAuthorId(Integer authorId) {this.authorId = authorId;}public String getInformation() {return information;}public void setInformation(String information) {this.information = information;} }

第一件重要的事情是authorId字段的修飾和其他注釋。

... @GeneratedValue(generator='gen') @GenericGenerator(name='gen', strategy='foreign', parameters=@Parameter(name='property', value='author')) ...

在@GeneratedValue中,我指定生成器的名稱(“ gen”),在@GenericGenerator中,我定義生成器的策略。 第二個重要的事情是使用適當?shù)膅etter和setter添加類中的author 。

...@OneToOne@PrimaryKeyJoinColumnprivate Author author; ...

通過這種方式,我們獲得了雙向關聯(lián)。 現(xiàn)在,我們可以從“傳記”中訪問“作者”,反之亦然,因為兩個對象之間都有相互引用。 現(xiàn)在,必須更新對象保存過程:

...public static void main(String[] args) {SessionFactory sessionFactory = HibernateUtil.getSessionFactory();Session session = sessionFactory.openSession();session.beginTransaction();Author author = new Author();author.setName(' O. Henry');Biography biography = new Biography();biography.setInformation('William Sydney Porter better known as O. Henry...');author.setBiography(biography);biography.setAuthor(author);session.save(author);session.getTransaction().commit();session.close();} ...

請注意,現(xiàn)在在添加反面之前,我不再堅持擁有面。 但是您可以看到我將傳記設置為作者,并在以下字符串中將作者設置為傳記 。 這是雙向關聯(lián)的主要目的。 代碼執(zhí)行的結果是:

Hibernate: insert into authors (name) values (?) Hibernate: insert into biographies (information, author_id) values (?, ?)

參考: Fruzenshtein的注釋博客中來自我們的JCG合作伙伴 Alex Fruzenshtein的雙向@OneToOne主鍵關聯(lián) 。

翻譯自: https://www.javacodegeeks.com/2013/03/bidirectional-onetoone-primary-key-association.html

主鍵能否@onetoone

總結

以上是生活随笔為你收集整理的主键能否@onetoone_双向@OneToOne主键关联的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。