Hibernate:插入ManyToMany,在关系表中生成ID

Ily*_*lya 4 java hibernate jpa

让我有桌子(书籍和作者有很多关系)

BOOKS
id
book_name

作者
id
author_name

BOOKS_AUTHORS
id
book_id
author_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  
}  
Run Code Online (Sandbox Code Playgroud)

现在,我尝试下一步

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);  
}  
Run Code Online (Sandbox Code Playgroud)

1)我得到BOOKS_AUTHORS记录的ID必须不为NULL的异常
2)我如何为关系表生成ID(ising sequance generator)BOOKS_AUTHORS

axt*_*avt 11

您不能使用它@ManyToMany来创建带有id字段的连接表.

如果连接表中的id字段是必需的,则必须BookAuthor为该表创建一个特殊的实体类(例如),并将其与带有@ManyToOne/ @OneToManyrelationships的书籍和作者连接.

否则,您需要从BOOKS_AUTHORS表中删除id字段.