gpt4 book ai didi

java - 未使用 Hibernate 标准投影别名

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:37 24 4
gpt4 key购买 nike

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

关于java - 未使用 Hibernate 标准投影别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com