2008-09-12 13 views
33

Ich versuche, nur die Liste der ID von Objekt Bob zum Beispiel anstelle der Liste von Bob zu bekommen. Es ist in Ordnung mit einer HQL-Anfrage, aber ich würde wissen, ob es möglich ist, Kriterien zu verwenden?Wie verwende ich die Hibernate-Kriterien, um nur ein Element eines Objekts anstelle des gesamten Objekts zurückzugeben?

Ein Beispiel:

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

Antwort

45

ich glaube, Sie mit Projektionen tun könnte, dass so etwas wie

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

oder setProjection (Projections.id())

16

Ähnlich können Sie auch:

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

Eine weitere Option (wenn auch ein wenig un Hibernate-esque) ist "raw" sql, wie diese zu verwenden:

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

Sie können

bob bb=null; 

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

    bb = (bob) criteria.uniqueResult(); 

als Einschränkungen wie diese das tun Sie können Ihre Bedingung hinzufügen

+1

Ist nicht die Antwort auf die Frage, aber es war mir nützlich –

Verwandte Themen