让我有表格(书籍和作者有 ManyToMany 关系)
书籍
编号
书名
作者
编号
作者姓名
BOOKS_AUTHORS
编号
book_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(ising 序列生成器)
最佳答案
您不能使用 @ManyToMany
创建带有 id 字段的连接表。
如果连接表中的 id 字段是必需的,则必须为该表创建一个特殊的实体类(例如 BookAuthor
),并使用 @ManyToOne 将其与书籍和作者连接
/@OneToMany
关系。
否则,您需要从 BOOKS_AUTHORS
表中删除 id 字段。
关于java - Hibernate:插入ManyToMany,在关系表中生成ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10445970/