【发布时间】:2020-11-25 01:18:11
【问题描述】:
我正在尝试利用 Querydsl 从表中获取一些结果。到目前为止,这是我尝试过的-
假设有 5 个名为 T1..T5 的实体。我正在尝试在 Querydsl 中执行此 SQL 查询 -
SELECT T1.*
FROM T1,T2,T3,T4,T5
WHERE T1.A=T2.A
AND T2.B=T5.B
AND T4.C=T2.C
AND T1.B=1234;
我尝试了以下方法,但 Hibernate 查询一直在运行,并且似乎没有结束。
booleanBuilder.and(JPAExpressions.select(qT1).from(qT1,qT2,qT3,qT4,qT5)
.where(
qT1.a.eq(qT2.a)
.and(qT1.a.eq(qT2.a))
... // and so on
.exists());
我正在使用扩展 QuerydslPredicateExecutor 的存储库并使用 findAll 执行此操作。问题是查询需要永远运行。我只对可能出现的第一个结果感兴趣。
那么,我哪里出错了,导致查询永远执行?
编辑: 我选择改用 JPAQuery。当然,生成的 Hibernate 查询也是一样的。这是我的 JPAQuery。
JPQLQuery jpqlQuery = new JPAQuery(entityManager);
jpqlQuery.select(qT1).from(qT1, qT2, qT3, qT4, qT5).where(booleanBuilder);
return jpqlQuery.fetch();
如何将limit 合并到上述JPAQuery 中,以便只获取第一个结果?
【问题讨论】:
标签: java spring-data-jpa querydsl