2010-10-21 29 views
3

如果我有叫Foo的一个实体,看起来有点像这样:Hibernate的过滤器,但只能检索属性之一

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

我希望检索有一个foo的对象的名称ID大于10。如果我已经有了美孚对象的集合,我可以做这样的事情:

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

有没有一种方法来创建上述过滤器,这样我会检索一个字符串列表(即Foo名称)而不是我必须手动过滤出来的Foos列表:

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

回答

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

或者试试这个。我不确定这是否会奏效,但前者肯定会奏效。

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

你使用短代码来过滤器来进行hibernate查询这样;

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