Hibernate doesn't support arithmetics expressions in the order by clause. Quoting the section 14.12. The group by clause of the Hibernate documentation:
Neither the group by clause nor the order by clause can contain arithmetic expressions.
And indeed, the following hql query won't return properly ordered results:
select p from Player p order by (p.wins/p.gamesPlayed)
And I don't think you can divide org.hibernate.criterion.Property
so the Criteria API won't solve this.
So I'd suggest to use a calculated attribute (with a formula), for example with annotations:
private float wins;
private float gamesPlayed;
@Formula(value = "WINS/GAMESPLAYED")
private float ratio;
This would allow the following query with the Criteria API:
session.createCriteria(Player.class).addOrder(Order.desc("ratio"))
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…