2010-10-21 7 views
3

Si j'ai une entité appelée Foo qui ressemble un peu à ceci:filtre Hibernate sur une liste d'entités, mais seulement récupérer un des attributs

@Entity 
public final class Foo { 
    private int id; 
    private String name; 
    ... 
} 

Je veux récupérer les noms des objets Foo qui ont un id supérieur à 10. Si je possède déjà une collection d'objets Foo, je pouvais faire quelque chose comme ceci:

List<Foo> foos = ... 
Query filter = session.createFilter(foos, "where id > :id"); 
filter.setInteger("id", 10); 
List filteredFoos = filter.list(); 

est-il un moyen de créer le filtre au-dessus de telle sorte que je récupérer une liste de chaînes (la Noms Foo) au lieu de la liste des Foos que je devrais filtrer manuellement comme ça:

for (Foo foo : filteredFoos) { 
    String name = foo.getName(); 
    ... 
} 

Répondre

1
List filteredFoos = session.createFilter(foos, "where id > :id") 
          .setInteger("id", 10).list(); 
List filteredFooNames = session.createFilter(filteredFoos, "select name").list(); 

Ou essayer. Je ne suis pas sûr que cela fonctionnerait, mais le premier fonctionnera définitivement.

List filteredFooNames = session.createFilter(foos, "select name where id > :id") 
          .setInteger("id", 10).list(); 
0

Vous utilisez un code court pour que le filtre hiberne la requête comme ceci;

List<Foo> foos = ....; 
 
Integer id = 10; 
 
List filterList = session.createFilter(foos, "where id>: id").setInteger("id",id).list();