我的問題很簡單..Hibernate | Spring Data JPA | @OneToOne
- 比方說,有2類..在圖書和作者
- 讓我們假設一本書只能由1個作者寫的。
- 作者可以寫很多書。
- 讓我們假設作者有獨特的名字。 [沒有2位作者可以有同名]
現在..假設所有的hibernate \ JPA配置都完成了。
從主要的方法 - 我救一個具有名稱「BOOK1」和作者姓名「作者1」
書BOOK1如果我把級聯所有..兩本書和作者能夠順利通過省書保存。
問題
現在,如果我救另一個書同一作者 - 它節省了書,再創作。這意味着我結束了2個相同的作者。
我做了什麼
- 我更換級聯ALL用MERGE。
- 分配筆者前書 - 我檢查DB的名字 -
一個。如果我得到迴應 - 我將檢索到的作者分配給書並保存該書。
b。如果我沒有得到任何結果 - 我將作者分配到書中,並保存作者和書籍。
這樣我就能解決我的問題。
但這是正確的方式嗎?
@Entity
class Book{
@Id
private Long bookId;
private String name;
@OneToOne
private Author author;
}
@Entity
class Author{
@Id
private Long authorId;
private String name;
}
主代碼
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(BeanConfiguration.class, args);
BookRepository bookRepo = context.getBean(BookRepository.class);
AuthorRepository authorRepo = context.getBean(AuthorRepository.class);
Book b1 = new Book();
b1.setBookName("book1");
Author a1 = new Author();
a1.setAuthorName("author1");
Author authorFromDatabase = authorRepo.findByAuthorName(a1.getAuthorName());
if (authorFromDatabase == null) {
b1.setAuthor(a1);
authorRepo.save(a1);
} else {
b1.setAuthor(authorFromDatabase);
}
bookRepo.save(b1);
}
更新 它不是那麼簡單。例如。請想想..客戶和地址的對應關係..客戶可以有一個或多個地址......如果新客戶與其他客戶共享地址,則不要使地址持續存在..只需將地址(id)分配給新客戶。
我的問題是我上面做了什麼,即搜索現有作者(或上述案例中的地址)是否正確? ..避免在作者(或地址表)重複的行
歡迎閱讀堆棧溢出,請閱讀[**我如何問一個好問題?**](http://stackoverflow.com/help/how-to-ask)特別是**「Write一個總結特定問題的標題「**部分。 –
添加將對象寫入數據庫的代碼。我也懷疑這是你錯過getter/setter和equals/hashCode實現的實際對象。 –
添加到主帖 – reverse