2011-03-15 192 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