我对JPA,Java和Hibernate还是很陌生,所以请耐心等待。
我有一个这样的JPA存储库:
@Repository
public interface OrderRepository extends JpaRepository<VPLabOrderLite, Integer> {
@Query(
"select o from VPLabOrderLite o "
+ "inner join fetch o.stay s "
+ "inner join fetch s.patient p "
+ "left join fetch o.orderedTests t "
+ "left join fetch t.result r "
+ "where p.id = :maAccession")
List<VPLabOrderLite> getOrders(@Param("maAccession") String maAccession);
}
问题是,当涉及到t.result上的最后一次联接提取时,它将为o.orderedTests t的每个实例生成一个返回到数据库的sql查询。这似乎与t.result属性具有@JoinColumns属性有关的事实有关,因为当我将其更改为单个@JoinColumn属性时,其他查询就会消失(但是联接的含义丢失了,所以我需要加入多列)
这是OrderedTest实体中的结果属性
@OneToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(
name = "orderNo",
referencedColumnName = "orderId",
insertable = false,
updatable = false),
@JoinColumn(
name = "testId",
referencedColumnName = "testId",
insertable = false,
updatable = false)
})
private VPLabTestResultLite result;
如何摆脱不必要的额外查询?