我正在处理一个单向的@OneToMany关联,它使用“author_book”表作为中间表。然而,当试图将一本新书添加到一个Author中,以便在“author_book”表中生成一个新条目时,我必须首先检索所有以前的Books。这个过程很耗时,特别是当作者有大量书籍的时候。在我的情况下,我不能使用双向@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条答案
按热度按时间3vpjnl9f1#
1.更改为@ManyToOne关系:
一种方法是将关系从@OneToMany修改为@ManyToOne。通过这样做,你可以建立一个从书到作者的关系。当添加一本新书时,您可以简单地设置这本书的作者,Hibernate将有效地执行单个insert语句。如果您不需要直接从作者导航到他们的书籍,则此方法非常有效。
2.原生SQL接口:
另一种选择是创建一个原生SQL查询来直接执行插入。它不会加载整个集合,因为您只需手动插入实体,而无需先加载它。
类似问题:Hibernate - How to persist a new item in a Collection without loading the entire Collection