Упорядочивание результатов вычисленным значением в В спящем режиме

У меня есть таблица Player с идентификатором столбцов, именем, победами, games_played. Я отобразил его на класс Плеер. Я хочу выполнить, следующий запрос В спящем режиме (предпочтительно с Критериями, если не возможный с Критериями HQL также поможет),

выберите * из порядка Плеера (победы / games_played)

Я ожидаю получать Список <Плеер>, отсортированный по их отношению победы.

Спасибо за ответ

Palo

8
задан Pascal Thivent 2 May 2010 в 17:01
поделиться

2 ответа

Hibernate не поддерживает арифметические выражения в предложении order by. Цитирую раздел 14.12. Пункт group by документации Hibernate:

Ни пункт group by, ни пункт order by не могут содержать арифметических выражений.

И действительно, следующий hql запрос не вернет правильно упорядоченные результаты:

select p from Player p order by (p.wins/p.gamesPlayed) 

И я не думаю, что вы можете разделить org.hibernate.criterion.Property, так что Criteria API не решит эту проблему.

Поэтому я бы предложил использовать вычисляемый атрибут (с формулой), например, с аннотациями:

private float wins;
private float gamesPlayed;
@Formula(value = "WINS/GAMESPLAYED")
private float ratio;

Это позволит сделать следующий запрос с Criteria API:

session.createCriteria(Player.class).addOrder(Order.desc("ratio"))
11
ответ дан 5 December 2019 в 12:57
поделиться

Из документации Hibernate -

SQL-функции и агрегатные функции разрешены в предложениях having и order by, если они поддерживаются базой данных.

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-ordering

Что означает, что вам нужно делать это на основе вашей базовой базы данных.

2
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

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