例如,我试图仅获取对象bob的ID列表,而不是bob的列表。可以使用HQL请求,但是我想知道是否可以使用条件?
一个例子:
1 2 3 4 5 6 7
| 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(); |
我认为您可以使用"投影"来做到这一点,例如
1 2 3 4
| Criteria.forClass(bob.class.getName())
.add(Restrictions.gt("id", 10))
.setProjection(Projections.property("id"))
); |
类似地,您也可以:
1 2 3 4 5 6 7 8 9
| 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/
1 2 3 4
| SessionFactory sessionFactory;
Criteria crit=sessionFactory.getCurrentSession().createCriteria(Model.class);
crit.setProjection(Projections.property("id"));
List result = crit.list(); |
此代码将为您提供模型类(如[1,2,3])中的ID列表。
如果要获取像[{"id":1},{"id":2}]这样的数组列表,请使用以下代码
1 2 3 4
| 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(); |
另一个选择(虽然有点像Hibernate一样)是使用" raw " sql,如下所示:
1 2
| List<Long> myList = session.createSQLQuery("select single_column from table_name")
.addScalar("single_column", StandardBasicTypes.LONG).list(); |
您可以像这样
1 2 3 4 5 6
| bob bb=null;
Criteria criteria = session.createCriteria(bob.class);
criteria.add(Restrictions.eq("id",id));
bb = (bob) criteria.uniqueResult(); |
作为限制,您可以添加条件