java - 使用 QueryDsl 从子查询创建别名
问题描述
我的目标是改变这个SQL query
:
select a.*, (select count(DOGS.DOG_ID) from DOGS where a.DOG_ID =
DOGS.DOG_ID) cnt
from ANIMALS a
order by cnt desc ;
我创建一个QueryDsl
这样的查询:
createQuery()
.select(Projections.constructor(AnimalsDto.class, animal.animalId, animal.firstName,
Expressions.as(subQueryForDogsCount(dogs, animal), "cnt")))
.from(animal).orderBy(new OrderSpecifier<>(Order.ASC, Expressions.asString("cnt"))).fetch();
而这subQueryForDogsCount
只是:
JPAExpressions.select(dogs.count()).from(dogs)
.where(dogs.dogId.eq(animal.dogId));
当我记录该查询时,我得到如下信息:
[select
animal.animalId,
prospect.firstName,
(select count(DOGS.dogId)
from DOGS dogs
where dogs.dogId = animal.dogId) as cnt
from ANIMAL animal
order by ?1 desc]
当我想执行它时,我得到一个NullPointerExpception
,我认为问题可能出在最后一个清单上?1
:为什么querydsl
看不到这个别名?也许还有其他方法可以为它创建别名?
解决方案
推荐阅读
- c# - 在没有用户交互的情况下将文件下载到客户端机器上的指定位置asp .Net
- matlab - MATLAB Concatenating struct:被连接的数组的维度不一致
- facebook - facebook graph api - 从页面上的用户那里获取发布的图像
- protractor - 我们如何在量角器中获取当前 url 的值
- ruby-on-rails - 使用“回形针”时的错误
- php - 如何在php中包含来自另一台服务器的文件并在另一台服务器中处理?
- javascript - 如何在 ionic 3 中实现 LinkedIn 登录?为什么链接登录不起作用?
- python - 当它们看起来像 3-D 数组时如何平衡数据?
- unicode - (问号) � 而不是旧页面上的 ÅÄÖ
- android - 无车身改装要求