Как использовать критерии спящего режима для возврата только одного элемента объекта, а не всего объекта? - программирование
Подтвердить что ты не робот

Как использовать критерии спящего режима для возврата только одного элемента объекта, а не всего объекта?

Я пытаюсь получить только список id объекта 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();
4b9b3361

Ответ 1

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

Criteria.forClass(bob.class.getName())
        .add(Restrictions.gt("id", 10))
        .setProjection(Projections.property("id"))
        );

Ответ 2

Аналогичным образом вы также можете:

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();

Ответ 3

или setProjection (Projections.id())

Ответ 5

SessionFactory sessionFactory;    
Criteria crit=sessionFactory.getCurrentSession().createCriteria(Model.class);
crit.setProjection(Projections.property("id"));
List result = crit.list();

Этот код даст вам список идентификаторов в классе модели, например [1,2,3]. если вы хотите получить список массивов, например, [{"id":1},{"id":2}], используйте следующий код

SessionFactory sessionFactory;    
Criteria crit=sessionFactory.getCurrentSession().createCriteria(Model.class); 
crit.setProjection(Projections.property("id").as("id")); 
List result = crit.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP).list();

Ответ 6

Другой вариант (хотя бит un hibernate-esque) заключается в использовании "raw" sql, например:

List<Long> myList = session.createSQLQuery("select single_column from table_name")
          .addScalar("single_column", StandardBasicTypes.LONG).list();

Ответ 7

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

    bob bb=null;

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

    bb = (bob) criteria.uniqueResult();

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