0
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().add(book1);

. 我目前的解决方案是将 CascadeType 合并并检查所有 user.getBooks() 如果该书已经存在。如果这本书不存在,我需要创建它(因为不是 CascadeType.PERSIST)

这是正确的解决方案吗?对于这种用例,有没有更好的“自动”解决方案?

4

1 回答 1

0

只要您在当前持久化上下文中使用 Book,级联持久化应该可以正常工作,并且只持久化新的 Books。如果您的 Book 是分离的,那么您首先需要在当前持久性上下文中合并或找到它。

于 2013-07-15T13:48:14.740 回答