Как использовать критерии гибернации, чтобы вернуть только один элемент объекта вместо всего объекта? - PullRequest
34 голосов
/ 12 сентября 2008

Я пытаюсь получить только список идентификаторов объекта bob, например, вместо списка bob. Это нормально с запросом HQL, но я бы знал, возможно ли это с использованием критериев?

Пример:

final StringBuilder hql = new StringBuilder();
hql.append( "select bob.id from " )
    .append( bob.class.getName() ).append( " bob " )
    .append( "where bob.id > 10");

final Query query = session.createQuery( hql.toString() );
return query.list();

Ответы [ 6 ]

45 голосов
/ 12 сентября 2008

Я думаю, вы могли бы сделать это с проекциями, что-то вроде

Criteria.forClass(bob.class.getName())
        .add(Restrictions.gt("id", 10))
        .setProjection(Projections.property("id"))
        );
18 голосов
/ 16 июня 2013

Точно так же вы можете:

Criteria criteria = session.createCriteria(bob.class);

criteria.add(Expression.gt("id", 10));

criteria.setProjection(Projections.property("id"));

criteria.addOrder(Order.asc("id"));

return criteria.list();
8 голосов
/ 12 сентября 2008

или setProjection (Projection.id ())

3 голосов
/ 23 апреля 2009
1 голос
/ 16 апреля 2015

Другой вариант (хотя и немного не в спящем режиме) - использовать «raw» sql, например:

List<Long> myList = session.createSQLQuery("select single_column from table_name")
          .addScalar("single_column", StandardBasicTypes.LONG).list();
0 голосов
/ 13 мая 2016

Вы можете сделать это так

    bob bb=null;

    Criteria criteria = session.createCriteria(bob.class);  
    criteria.add(Restrictions.eq("id",id));

    bb = (bob) criteria.uniqueResult();

в качестве ограничения вы можете добавить свое условие

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