java - QueryDSL fetch 加入没有 groupby 的请求 GROUP BY
问题描述
我想使用 fetch join 急切地获得与 QueryDSL 的嵌套关联。
这个查询非常有效:
entityManager.createQuery("select player from Player player " +
"left outer join fetch player.encryptions encryption " +
"left outer join fetch encryption.result result " +
"left outer join fetch encryption.question question " +
"where player.nickName = :nickName ")
.setParameter("nickName", nickName)
.getSingleResult();
但是这个(写在QueryDSL上)
queryFactory.from(qPlayer)
.leftJoin(qPlayer.encryptions, qEncryption).fetchJoin()
.leftJoin(qEncryption.result, qResult).fetchJoin()
.leftJoin(qEncryption.question).fetchJoin()
.where(qPlayer.nickName.eq(nickName))
.select(Projections.constructor(PlayerScore.class, qPlayer, qResult.pointsAmount.sum()))
.fetchOne();
出于某种神奇的原因,尽管我什至不使用它,但还是要求按子句分组。
更具体地说,QueryDSL 请求属于这样的例外:
ERROR: column "player0_.id" must appear in the GROUP BY clause or be used in an aggregate function
这两个代码片段生成的 SQL 查询略有不同。QueryDSL 在select
子句中有两个额外的片段:
select
player0_.id as col_0_0_,
sum(result2_.points_amount) as col_1_0_,
...
是重复的,我认为这player0_.id
是它失败的原因。我也认为这是 QueryDSL 错误。
解决方案
推荐阅读
- php - Woocommerce 注册检查推荐代码是否有效
- javascript - 如何将动态复选框值绑定到对象上的 Knockout observableArray?
- javascript - 如果我定义了文件夹路径,则在引导程序或 HTML 页面中显示文件夹结构
- linux - 如何检查目录的 md5hash 并将其与包含发送到目标目录的所有文件的哈希的文件进行比较
- android - 如何在 Firebase 中搜索范围?
- android - 如何将自定义列表添加到列表视图控件中?
- reactjs - 在 React Native 中定位图像:从顶部开始,拉伸到屏幕宽度,保持纵横比
- events - 球拍 gui 键事件:忽略大小写
- javascript - 我无法使用 Jquery 附加到现有表单
- javascript - 无法使用 Node JS 和 Express JS 从客户端下载文件