代码之家  ›  专栏  ›  技术社区  ›  chebad

使用QueryDsl从子查询创建别名

  •  1
  • chebad  · 技术社区  · 6 年前

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

    0 回复  |  直到 6 年前
    推荐文章