Hibernate не поддерживает арифметические выражения в предложении order by. Цитирование раздела 14.12. Группировка по пункту документации 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"))