在Hibernate中按计算值排序结果

Pal*_*alo 8 orm hibernate hql criteria

我有一个带有列id,名称,胜利,games_played的表播放器.我将它映射到类Player.我想在Hibernate中执行以下查询(最好使用Criteria,如果不可能使用Criteria HQL也会有帮助)

从玩家订单中选择*(wins/games_played)

我希望按照他们的胜率对List <Player>进行排序.

谢谢你的回答

帕洛阿尔托

Pas*_*ent 11

Hibernate不支持order by子句中的算术表达式.引用第14.12.Hibernate文档的group by子句:

group by子句和order by子句都不能包含算术表达式.

实际上,以下hql查询将不会返回正确排序的结果:

select p from Player p order by (p.wins/p.gamesPlayed) 
Run Code Online (Sandbox Code Playgroud)

而且我认为你不能分开,org.hibernate.criterion.Property所以Criteria API无法解决这个问题.

所以我建议使用计算属性(使用公式),例如使用注释:

private float wins;
private float gamesPlayed;
@Formula(value = "WINS/GAMESPLAYED")
private float ratio;
Run Code Online (Sandbox Code Playgroud)

这将允许使用Criteria API进行以下查询:

session.createCriteria(Player.class).addOrder(Order.desc("ratio"))
Run Code Online (Sandbox Code Playgroud)