我试图仅获取对象bob的id列表,而不是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();
答案 0 :(得分:45)
我认为你可以用Projections做到这一点,比如
Criteria.forClass(bob.class.getName())
.add(Restrictions.gt("id", 10))
.setProjection(Projections.property("id"))
);
答案 1 :(得分:18)
同样你也可以:
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();
答案 2 :(得分:8)
或setProjection(Projections.id())
答案 3 :(得分:3)
答案 4 :(得分:2)
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}]
这样的数组列表,请使用以下代码
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();
答案 5 :(得分:1)
另一种选择(虽然有点un hibernate-esque)是使用" raw" sql,像这样:
List<Long> myList = session.createSQLQuery("select single_column from table_name")
.addScalar("single_column", StandardBasicTypes.LONG).list();
答案 6 :(得分:-1)
你可以这样做
bob bb=null;
Criteria criteria = session.createCriteria(bob.class);
criteria.add(Restrictions.eq("id",id));
bb = (bob) criteria.uniqueResult();
作为限制,您可以添加条件