从hibernate中的表中获取最大值记录

时间:2010-09-18 21:59:01

标签: java hibernate orm

如何从hibernate中的表中获取最大值记录?

4 个答案:

答案 0 :(得分:53)

您可以使用投影:

Criteria criteria = session
    .createCriteria(Person.class)
    .setProjection(Projections.max("age"));
Integer maxAge = (Integer)criteria.uniqueResult();

答案 1 :(得分:25)

AFAIK,Projections只会检索你想要的一部分列(或只是一列?)。

如果您的数据对象是这样的:

class Person {
    private String id;
    private String name;
    private int age;
    ...
}

并希望表中最老的人,以下似乎有效:

...
Person oldest = 
    (Person) session.createCriteria(Person.class)
    .addOrder(Order.desc("age"))
    .setMaxResults(1)
    .uniqueResult();
...

Hibernate日志(show_sqlformat_sqluse_sql_comments都设置为true)显示

select
    *
from
    ( /* criteria query */ select
        this_.ID as ID1_12_0_,
        this_.NAME as NAME_12_0_,
        this_.AGE as AGE_12_0_
    from
        PERSON this_
    order by
        this_.AGE desc )
where
    rownum <= ?

这似乎是正确的。请注意,这是在使用Oracle 11 XE的Hibernate 3.3.2上。

答案 2 :(得分:6)

使用max(...)聚合函数:

select max(cat.weight) from Cat cat

参考

答案 3 :(得分:5)

您可以使用子查询:

SELECT * FROM Employee WHERE age IN (SELECT MAX(age) age FROM Employee)