如何从hibernate中的表中获取最大值记录?
答案 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_sql
,format_sql
和use_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)
答案 3 :(得分:5)
您可以使用子查询:
SELECT * FROM Employee WHERE age IN (SELECT MAX(age) age FROM Employee)