Java 未使用Hibernate标准投影别名

Java 未使用Hibernate标准投影别名,java,hibernate,Java,Hibernate,Hibernate投影别名是否有效?我可以发誓,事实并非如此。至少,它没有达到我期望的效果 以下是java: return sessionFactory.getCurrentSession() .createCriteria(PersonProgramActivity.class) .setProjection(Projections.projectionList() .add(Projections.alias(Projections.sum("numberOf

Hibernate投影别名是否有效?我可以发誓,事实并非如此。至少,它没有达到我期望的效果

以下是java:

return sessionFactory.getCurrentSession()
    .createCriteria(PersonProgramActivity.class)
    .setProjection(Projections.projectionList()
        .add(Projections.alias(Projections.sum("numberOfPoints"), "number_of_points"))
        .add(Projections.groupProperty("person.id")))
    .setFirstResult(start)
    .setFetchSize(size)
    .addOrder(Order.desc("numberOfPoints"))
    .list();
以下是它生成的SQL:

select
    sum(this_.number_of_points) as y0_,
    this_.person_id as y1_
from
    PERSON_PROGRAM_ACTIVITY this_
group by
    this_.person_id
order by
    this_.number_of_points desc
它似乎根本没有使用别名。我认为设置别名将意味着
sum(这个\u点数)
将被别名为
number\u点数
,而不是
y0
。我错过了什么把戏吗


谢谢。

您需要为整个标准提供一个别名,然后您可以创建实际使用的其他别名。奇怪的是,别名变成了
y0\u0
,而不是反过来

return sessionFactory.getCurrentSession()
    .createCriteria(PersonProgramActivity.class, "ppa")
    .setProjection(Projections.projectionList()
        .add(Projections.alias(Projections.sum("numberOfPoints"), "ppa.numberOfPoints"))
        .add(Projections.groupProperty("person.id")))
    .setFirstResult(start)
    .setFetchSize(size)
    .addOrder(Order.desc("ppa.numberOfPoints"))
    .list();
生成以下SQL:

select
    sum(this_.number_of_points) as y0_,
    this_.person_id as y1_
from
    PERSON_PROGRAM_ACTIVITY this_
group by
    this_.person_id
order by
    this_.y0_ desc
查询应该是

return sessionFactory.getCurrentSession()
    .createCriteria( PersonProgramActivity.class, "ppa" )
    .setProjection(Projections.projectionList()
        .add( Projections.alias( Projections.sum( **"ppa.numberOfPoints"** ), **"numberOfPoints"** ) )
        .add( Projections.groupProperty( "person.id" ) ) )
    .setFirstResult( start )
    .setFetchSize( size )
    .addOrder( Order.desc( "ppa.numberOfPoints" ) )
    .list();

+1我也见过这种情况,我想是子查询。