Let I have Tables (Books と Authors には ManyToMany 関係があります)
BOOKS
id
book_name
AUTHORS
id
author_name
BOOKS_AUTHORS
ID
book_id
author_id
このテーブルをエンティティにマッピングします
class Books
{
@Id
long id;
@Column(name = "author_name")
String name;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "BOOKS_AUTHORS",
joinColumns = @JoinColumn(name = "book_id"),
inverseJoinColumns = @JoinColumn(name = "author_id"))
List<Authots> authors;
// setter, getters, adder
}
class Authors
{
@Id
long id;
@Column(name = "author_name")
String name;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinTable(name = "BOOKS_AUTHORS",
joinColumns = @JoinColumn(name = "author_id"),
inverseJoinColumns = @JoinColumn(name = "book_id"))
List<Books> books;
// setter, getters, adder
}
さて、次をやってみる
public void addAuthor(final String bookName, final Author author)
{
final Book book = // get book from database by bookName
if (book == null)
throw new DataNotFoundException("Book not found :(");
author.addBook(book);
book.addAuthor(author);
entityManager.persist(author);
}
1) BOOKS_AUTHORS レコードの ID は NULL であってはならないという例外
が発生する 2) リレーションシップ テーブル BOOKS_AUTHORS の ID (イジング シーケンス ジェネレーター) を生成する方法