Будьте в спящем режиме псевдоним Проекции критерия, не используясь

Действительно Будьте в спящем режиме псевдонимы Проекции даже работают? Я мог поклясться, что это просто не делает. По крайней мере, это не делает то, что я ожидал бы, что это сделает.

Вот 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_. Есть ли некоторый прием, который я пропускаю?

Спасибо.

6
задан sbzoom 28 January 2013 в 19:24
поделиться

1 ответ

Вам нужно дать всему критерию псевдоним, затем вы можете создать другие псевдонимы, которые действительно будут использоваться. Странно то, что псевдонимы превращаются в 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
6
ответ дан 17 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: