最初,我开始在@OneToOne映射方案中解决N + 1选择问题,最后终于将多个选择查询减少为一个。我尝试使用EntityGraphs解决N + 1问题,但是它不起作用。所以我通过将fetch Type设置为Lazy并设置Optional = false来将@OneToOne映射更改为LAZY。 我正在使用Hibernate JPA。
我进行了如下所示的更改
Public Class Parent {
@OneToOne(
optional = false,
mappedBy = "parent",
fetch = FetchType.LAZY,
cascade = {CascadeType.ALL})
@NotFound
private Child child;
}
在“我的孩子”课程中,
Public Class Child {
@Id
private String Id;
@OneToOne
@PrimaryKeyJoinColumn
private Parent parent;
}
Repository类如下,
public interface ParentChildRepository extends PagingAndSortingRepository<Transaction, String> {
@EntityGraph(value = "Parent.EntityGraph", type = EntityGraphType.LOAD)
default List<Transaction> findall() {
return StreamSupport.stream(findAll().spliterator(), false).collect(Collectors.toList());
}
}
没有optional = false的情况,LazyLoading不起作用,并且我得到N + 1个Select查询语句,但是当我设置了optional = false时, 抛出EntityNotFoundException异常。当optional = false语句被删除/设置为true时,不会引发EntityNotFoundException,但是它不能解决我的N + 1选择问题。
请提供一些建议。