Действительно Будьте в спящем режиме псевдонимы Проекции даже работают? Я мог поклясться, что это просто не делает. По крайней мере, это не делает то, что я ожидал бы, что это сделает.
Вот 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