我的目标是改变这个
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
没有看到这个别名吗?也许还有其他方法可以为它创建别名吗?