Amr*_*sal 30 java hibernate criteria
使用Hibernate的 Criteria API,我想在表中选择具有给定列的最大值的记录.
我试图用投影,创造一个别名为max(colunName)
,然后使用它restrictions.eq()
,但它不断告诉我" 无效号码 ".
使用Hibernate的正确方法是什么?
Pas*_*ent 36
您可以使用a DetachedCriteria
来表示子查询,如下所示:
DetachedCriteria maxId = DetachedCriteria.forClass(Foo.class)
.setProjection( Projections.max("id") );
session.createCriteria(Foo.class)
.add( Property.forName("id").eq(maxId) )
.list();
Run Code Online (Sandbox Code Playgroud)
ama*_*eod 22
我发现使用addOrder
和setMaxResults
一起为我工作.
Criteria c = session.createCriteria(Thingy.class);
c.addOrder(Order.desc("id"));
c.setMaxResults(1);
return (Thingy)c.uniqueResult();
Run Code Online (Sandbox Code Playgroud)
使用MySQL方言,这会生成一个关于这样的SQL预处理语句(剪掉一些字段):
select this_.id ... from Thingy this_ order by this_.id desc limit ?
Run Code Online (Sandbox Code Playgroud)
我不确定这个解决方案对MySQL以外的方言是否有效.
使用
addOrder(Order.desc("id"))
Run Code Online (Sandbox Code Playgroud)
并获取第一个结果:)