Ответ 1
Я думаю, вы могли бы сделать это с помощью Projections, что-то вроде
Criteria.forClass(bob.class.getName())
.add(Restrictions.gt("id", 10))
.setProjection(Projections.property("id"))
);
Я пытаюсь получить только список 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();
Я думаю, вы могли бы сделать это с помощью Projections, что-то вроде
Criteria.forClass(bob.class.getName())
.add(Restrictions.gt("id", 10))
.setProjection(Projections.property("id"))
);
Аналогичным образом вы также можете:
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();
или setProjection (Projections.id())
http://www.devarticles.com/c/a/Java/Hibernate-Criteria-Queries-in-Depth/2/
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();
Другой вариант (хотя бит un hibernate-esque) заключается в использовании "raw" sql, например:
List<Long> myList = session.createSQLQuery("select single_column from table_name")
.addScalar("single_column", StandardBasicTypes.LONG).list();
Вы можете сделать это, как это
bob bb=null;
Criteria criteria = session.createCriteria(bob.class);
criteria.add(Restrictions.eq("id",id));
bb = (bob) criteria.uniqueResult();
в качестве ограничений вы можете добавить свое условие