JPA:单向ManyToMany,要插入现有对象

时间:2013-07-15 08:26:02

标签: jpa

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)

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

1 个答案:

答案 0 :(得分:0)

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