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_.我缺少一些技巧吗?
谢谢.
您需要为整个条件指定别名,然后您可以创建实际使用的其他别名.奇怪的是,别名变成了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)
| 归档时间: |
|
| 查看次数: |
14683 次 |
| 最近记录: |