我最初开始解决我@OneToOne映射脚本的N + 1选择问题,我终于能够降低多选查询之一。 我试着用EntityGraphs来解决N + 1层的问题,但它不工作。 所以我改变了我的@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());
}
}
没有可选=假,惰性加载不工作,我得到N + 1 Select查询语句,但是当我做设置可选=假,EntityNotFoundException抛出异常。 当可选=虚假陈述被移除EntityNotFoundException没有抛出/设置为true,但它并没有解决我的N + 1个选择问题。
请提供一些建议。