Hibernate标准没有使用投影别名

sbz*_*oom 6 java hibernate

Hibernate Projection别名甚至可以工作吗?我发誓它不会发誓.至少,它没有做我期望它做的事情.

这是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();
Run Code Online (Sandbox Code Playgroud)

这是它生成的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
Run Code Online (Sandbox Code Playgroud)

它似乎根本不使用别名.我想设置别名意味着sum(this_.number_of_points)将别名为number_of_points,而不是y0_.我缺少一些技巧吗?

谢谢.

sbz*_*oom 6

您需要为整个条件指定别名,然后您可以创建实际使用的其他别名.奇怪的是,别名变成了y0_而不是相反.

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();
Run Code Online (Sandbox Code Playgroud)

生成以下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
Run Code Online (Sandbox Code Playgroud)