2011-03-15 181 views
2

我想问一下是否可以使用hibernate来做到这一点。 假设我已经运行HQL并检索了一个集合。是否有可能使用休眠进一步过滤?Hibernate过滤查询集合

我试图使用<filter>头类,并添加session.enable()查询之前,但似乎不工作。

示例代码

Query search = session.getNamedQuery(HQL_SOMEDEFAULTQUERY); 
List results = search.list(); 
//further filtering ... 

剥离下来HQL

select h 
    from flow as f 
    join f.item as i 
    join i.header as h 
    where i.status = :status 
    and f.staff = :staff 
    order by i.prId desc 

回答

2

号至少,不是你的方式问。一旦你要求Hibernate命中数据库(使用list()方法),Hibernate已经发挥了作用,结果现在掌握在你的手中。您可以在代码中实施过滤逻辑以后处理结果。

也就是说,有可能过滤结果查询本身。如果你定义了一个Hibernate过滤器并为特定的模型/查询启用它,你可以保留你原来的HQL查询,Hibernate会附加额外的where子句来进一步过滤结果。看到这一点:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/filters.html

+0

我试图使用session.enableFilter()方法,但似乎它不工作。可能是因为我正在检索一个集合。纠正我,如果我错了。 – Quincy 2011-03-15 07:56:58

+0

@partenon提到的链接详细描述了过滤器的用法。不,它不会因为您检索集合而损坏。你很可能会错过配置的另一部分。 – 2011-03-15 08:13:12

+0

我的意思是一个标题集合被检索,但不是过滤的集合。我在头文件类中设置了过滤器,但不知何故它不是使用上面的HQL触发的。我应该将过滤器放置在项目的标题集合中吗? – Quincy 2011-03-15 08:57:25