Подтвердить что ты не робот

Получить максимальную запись из таблицы в спящем режиме

Как получить запись максимального значения из таблицы в спящем режиме?

4b9b3361

Ответ 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

Ссылка

Ответ 4

Вы можете использовать подзапрос:

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