User {
Set<Book> _books;
@ManyToMany(cascade={CascadeType.MERGE})
@JoinTable(
name="BLETAG_LABEL",
joinColumns={@JoinColumn(name="TAG_ID", referencedColumnName="ID")},
inverseJoinColumns={@JoinColumn(name="LABEL_ID", referencedColumnName="ID")})
Set<Book>getBooks();
}
Book {
}
。如果我将CascadeType设置为PERSIST并尝试使用这样的现有书籍(book1)创建用户,则会触发一个唯一约束...
Book book1 = new Book(“book1”); 。user.getBooks()添加(BOOK1);
。我目前的解决方案是CascadeType到MERGE并检查所有user.getBooks(),如果该书已经存在。如果这本书不存在,我需要创建它(因为不是CascadeType.PERSIST)
这是正确的解决方案吗? 对于这种用例,是否有更好的“自动”解决方案?
答案 0 :(得分:0)
只要您使用当前持久性上下文中的Book,cascade persist应该可以正常工作,并且只保留新的Books。如果您的Book是分离的,那么您首先需要在当前的持久化上下文中合并或找到它。