[英]Hibernate criterion Projection alias not being used
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();
这是它生成的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(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();
生成以下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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.