主键能否@onetoone_双向@OneToOne主键关联
主鍵能否@onetoone
現在該繼續有關Hibernate的文章了。 最后一個致力于單向@OneToOne關聯 。 因此,今天我將向您展示如何獲取雙向@OneTonOne主鍵關聯 。 本教程中基于前一篇文章的示例。 讓我們開始吧。
我將使用以前創建的相同表。 為了建立雙向一對一關聯,我需要更新兩個POJO和保存過程的方式。 讓我們考慮一個新版本的Author類:
變化很小。 我剛剛從傳記字段中刪除了@PrimaryKeyJoinColumn。 在雙向關聯中,出現關聯的兩個方面- 擁有和反向 。 對于一對一的雙向關系,擁有方對應于包含相應外鍵的方。 在我們的情況下,擁有方是Author類。 讓我們繼續。
引用JPA 2規范:
雙向關系的反面必須通過使用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中,我定義生成器的策略。 第二個重要的事情是使用適當的getter和setter添加類中的author 。
...@OneToOne@PrimaryKeyJoinColumnprivate Author author; ...通過這種方式,我們獲得了雙向關聯。 現在,我們可以從“傳記”中訪問“作者”,反之亦然,因為兩個對象之間都有相互引用。 現在,必須更新對象保存過程:
...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();} ...請注意,現在在添加反面之前,我不再堅持擁有面。 但是您可以看到我將傳記設置為作者,并在以下字符串中將作者設置為傳記 。 這是雙向關聯的主要目的。 代碼執行的結果是:
Hibernate: insert into authors (name) values (?) Hibernate: insert into biographies (information, author_id) values (?, ?)參考: Fruzenshtein的注釋博客中來自我們的JCG合作伙伴 Alex Fruzenshtein的雙向@OneToOne主鍵關聯 。
翻譯自: https://www.javacodegeeks.com/2013/03/bidirectional-onetoone-primary-key-association.html
主鍵能否@onetoone
總結
以上是生活随笔為你收集整理的主键能否@onetoone_双向@OneToOne主键关联的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 擂怎么组词 擂的组词有哪些
- 下一篇: 蒲圻怎么读 蒲圻在哪里