我正在处理一个单向 @OneToMany 关联,它利用“author_book”表作为中间表。但是,当尝试向作者添加新书籍以便在“author_book”表中生成新条目时,我必须首先检索所有以前的书籍。这个过程变得非常耗时,尤其是当作者拥有大量书籍时。就我而言,我无法使用双向 @OneToMany 关联。有没有更有效的方法使用单向方法来完成此任务?
作者单位:
@Entity
public class AuthorEntity {
@Id
private long id;
@OneToMany
@JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "id_author"),
inverseJoinColumns = @JoinColumn(name = "id_book"))
private Set<BookEntity> books;
}
和书籍实体:
@Entity
public class BookEntity {
@Id
private long id;
}
添加新书
public void addBook(BookEntity book) {
AuthorEntity author = authorRepository.findById(authorId);
author.getBooks().add(book);
entityManager.merge(author);
}
1。更改为@ManyToOne关系:
一种方法是将关系从@OneToMany修改为@ManyToOne。通过这样做,您可以建立书籍与其作者之间的关系。添加新书时,您只需设置该书的作者,Hibernate 将高效地执行单个插入语句。如果您不需要直接从作者导航到他们的书籍,则此方法非常有效。
BookEntity b = new BookEntity();
AuthorEntity a = em.getReference(AuthorEntity.class, 1L);
b.setAuthor(a);
b.setId(342L);
em.persist(b);
2。 本机 SQL 查询:
另一种选择是创建本机 SQL 查询来直接执行插入。它不会加载整个集合,因为您只需手动插入实体而不先加载它。