2008-09-12 3 views
33

J'essaye d'obtenir seulement la liste d'id de l'objet bob par exemple au lieu de la liste de bob. C'est correct avec une requête HQL, mais je saurais si c'est possible en utilisant des critères?Comment utiliser les critères de mise en veille prolongée pour renvoyer un seul élément d'un objet à la place de l'objet entier?

Un exemple:

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

Répondre

45

Je pense que vous pouvez le faire avec les projections, quelque chose comme

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

ou setProjection (Projections.id())

16

De même, vous pouvez également:

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

Une autre option (si un peu un hibernate-esque) est d'utiliser sql "brut", comme ceci:

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

Vous pouvez le faire comme ça

bob bb=null; 

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

    bb = (bob) criteria.uniqueResult(); 

que les restrictions vous pouvez ajouter votre condition

+1

N'est pas la réponse à la question, mais c'était usuel pour moi –

Questions connexes