我一直在jpa中使用native query来处理下面的查询,因为我之前一直在急切地获取关系表,但是最近我的数据库中有很多数据增量,所以我对一些关系表实现了lazy fetch。现在我遇到了麻烦,无法将下面的查询转换为HQL查询来解决LazyInitializeException。有人能帮忙吗?
本地查询:
@Query("SELECT * from tableA a inner join (select DISTINCT ON (auid) * from tableB where " +
"status = 4 order by auid,date_created desc ) b on a.uid = b.auid inner join tableC c on " +
"c.uid = b.uid where a.group_uid = :groupUid and c.condition = 1 and c.status = 0 and " +
"b.type <> 2 and b.enable = true", nativeQuery = true)
List<TableA> findListA(@Param("groupUid") String groupUid)
注意:我现在的解决方法是使用上面的查询从tableA中选择uid,然后使用HQL运行下面的另一个查询来获取tableB和tableC关系:
@Query("SELECT a FROM TableA JOIN FETCH a.tableB JOIN a.tableB.tableC WHERE a.uid = :uid")
TableA getOne(@Param("uid" String uid)
1条答案
按热度按时间nle07wnf1#
我对
distinct on
持怀疑态度,这个替代方案“可能”会有所帮助:然而,b2子查询“可能”不会将子查询限制为每个auid只有1行,尽管这只会发生在多行可以共享最大日期(希望真的是时间戳)的情况下。
如果这种方法不起作用,那么也许这会起作用: