私の質問は非常に単純な..ですHibernate | SpringデータJPA | @OneToOne
- 帳や著者
- はのは、本がONLY 1人の著者によって書かれたことができると仮定しよう。..さんは2クラスがあるとしましょう。
- 著者は多くの本を書くことができます。
- 著者に一意の名前が付いているとしましょう。 [2人の作者は同じ名前を持つことができません]
今、すべてのhibernate \ JPA設定が完了したと仮定します。 mainメソッドから
- 私はALLとしてカスケードを置けば、私は名前を「BOOK1」と著者名「author1」
を持つブックBOOK1を保存するには...書籍や著者の両方がブックを保存するときに保存されます。それは再び本と著者の両方を保存している - 私は同じ著者で別のブックを保存する場合は今、
問題
。これは私が同じ2人の著者で終わることを意味します。私は
- を行っている何
私はすべての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)を割り当ててください。
私の質問は上記のことです。つまり、既存の著者(または上記のアドレス)を検索するのが正しいアプローチですか? Author
それは@OneToOne
協会が、@OneToMany
関連ではない多くのBook
を持つことができれば...著者(またはアドレステーブル)での重複行
[**私はどのように良い質問をしますか?**](http://stackoverflow.com/help/how-to-ask)特定の問題をまとめたタイトル "**セクション。 –
オブジェクトをデータベースに書き込むコードを追加します。私はこれがあなたの実際のオブジェクトであるとは思わない。私はgetter/setterとequals/hashCodeの実装が不足している。 –
メインポストに追加 – reverse