получить максимальную запись из таблицы в спящем режиме - PullRequest
28 голосов
/ 19 сентября 2010

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

Ответы [ 4 ]

54 голосов
/ 19 сентября 2010

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

Criteria criteria = session
    .createCriteria(Person.class)
    .setProjection(Projections.max("age"));
Integer maxAge = (Integer)criteria.uniqueResult();
25 голосов
/ 08 сентября 2012

AFAIK, Проекции будут получать только подмножество столбцов (или это только один столбец?), Которые вы хотите.

Если ваш объект данных выглядит так:

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.

6 голосов
/ 19 сентября 2010

Используйте функцию агрегирования max(...):

select max(cat.weight) from Cat cat

Справочник

5 голосов
/ 05 августа 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...