使用休眠条件获取具有最大 ID 的记录

2022-09-01 08:16:06

使用Hibernate的 Criteria API,我想在表中选择具有给定列的最大值的记录。

我试图使用投影,为 创建一个别名,然后在limitings.eq()中使用它,但它一直告诉我“无效数字”。max(colunName)

使用Hibernate的正确方法是什么?


答案 1

您可以使用 来表示子查询,如下所示:DetachedCriteria

DetachedCriteria maxId = DetachedCriteria.forClass(Foo.class)
    .setProjection( Projections.max("id") );
session.createCriteria(Foo.class)
    .add( Property.forName("id").eq(maxId) )
    .list();

引用


答案 2

我发现使用和一起工作对我有用。addOrdersetMaxResults

Criteria c = session.createCriteria(Thingy.class);
c.addOrder(Order.desc("id"));
c.setMaxResults(1);
return (Thingy)c.uniqueResult();

使用MySQL方言,这会生成一个SQL预准备语句,如下所示(剪掉一些字段):

select this_.id ... from Thingy this_ order by this_.id desc limit ?

我不确定这个解决方案是否对MySQL以外的方言有效。


推荐