问题:简单的例子,我们有一个表:保存数据与uniq的领域
@Entity
@Table(name = "books")
public class Book {
// other columns
private Set<Genre> genres = new LinkedHashSet<>();
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinTable(name = "book_genre", joinColumns = {@JoinColumn(name="book_id")}, inverseJoinColumns = {@JoinColumn(name="genre_id")})
@OrderBy("name ASC")
public Set<Genre> getGenres() {
return genres;
}
}
类型表(实体)具有独特的列名,这列已经包含一行名例如流派,现在如果我会尽力保存新书实体相同流派名称:
Set<Genre> newBookGenres = new LinkedHashSet<>();
Genre newBookGenre = new Genre("Example genre"); //new genre with name [Example genre]
newBookGenres.add(newBookGenre);
Book book = new Book(newBookGenres);
session.save(book);
它不会保存该书并抛出唯一列的异常(示例流派已存在于流派名称中)。
问题:我该如何保存这样的实体?我认为,在保存图书之前,我可以搜索类型该书类型名称表,如果存在(在数据库中)具有相同名称的类型,那么只需将书类型对象替换为数据库类型对象。但我不知道它是否会起作用,并相信有最简单的方法。