我发现了一些有关使用Hibernate优化JPA的博客文章,但是对于EclipseLink,我的最佳研究结果是该注释,该注释可以神奇地解决JPA将命令转换为多个数据库调用的问题:https://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_batchfetch.htm >
但是我不确定这是否是正确的解决方案,并且我不太了解如何使用它。
这是我的第一个导致多个呼叫的界面:
@Transactional
public interface CustomerorderRepository extends JpaRepository<Customerorder, Long>{
default List<Customerorder> findAllOpenCustomerorders(Long userId) {
return this.findAllByUserIdAndStatusIsOrderByCreatedAtAsc(userId, Status.OPEN);
}
}
实体Customerorder包含两个可能与问题相关的字段:
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "address_data")
@Getter(AccessLevel.PACKAGE)
@Setter(AccessLevel.PRIVATE)
private CustomerAddressdata customerAdressdata;
@OneToMany(mappedBy = "customerorder", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderColumn(name = "id")
private List<Article> articles;
另一个遭受相同问题的呼叫接口是这个
@Transactional
public interface BusinessorderRepository extends JpaRepository<Businessorder, Long> {
@Query(" select distinct foo.batz.businessorder from Foo foo " +
" where foo.bar.businessId in :ids")
List<Businessorder> getBusinessordersByFoobarIds(@Param("ids") List<Long> ids);
}
我对JPA性能优化的整个世界都是陌生的。任何提示如何解决此问题表示赞赏。谢谢。