2008-09-12 3 views
33

私は、例えばbobのリストの代わりに、オブジェクトbobのidのリストだけを取得しようとしています。 HQLリクエストは大丈夫ですが、基準を使用することが可能かどうかはわかりますか?オブジェクト全体ではなく、オブジェクトの1つの要素だけを返すために休止状態を使用するにはどうすればよいですか?

例:

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

答えて

45

私はあなたが、突起を

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

またはsetProjection(Projections.id())

16

ようなものがあることを行うことができると思います同様にすることもできます:

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

別のオプション(休止風のビット国連が)このように、 "生" のSQLを使用することです:

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

あなたは制限事項として、この

bob bb=null; 

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

    bb = (bob) criteria.uniqueResult(); 

のようにそれを行うことができますあなたの条件を追加することができます

+1

質問に対する答えではありませんが、それは私には大変でした –