Как получить запись максимального значения из таблицы в спящем режиме?
Получить максимальную запись из таблицы в спящем режиме
Ответ 1
Вы можете использовать проекцию:
Criteria criteria = session
.createCriteria(Person.class)
.setProjection(Projections.max("age"));
Integer maxAge = (Integer)criteria.uniqueResult();
Ответ 2
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 <= ?
Что кажется правильным. Обратите внимание, что это относится к Hibernate 3.3.2 с Oracle 11 XE.
Ответ 3
Используйте агрегированную функцию max(...)
:
select max(cat.weight) from Cat cat
Ссылка
- Справочное руководство по Hibernate Core
Ответ 4
Вы можете использовать подзапрос:
SELECT * FROM Employee WHERE age IN (SELECT MAX(age) age FROM Employee)