2009-12-15 80 views
1

我目前有一個實體,其上設置了where子句。我想把這個where子句放在一個過濾器上,並默認打開(這樣我就不會破壞任何現有的功能)。默認情況下,您如何爲特定實體啓用休眠過濾器?

我想把它變成一個過濾器,以便我可以禁用它,因爲我有一個用例,我需要它禁用。

我該如何做到這一點在休眠3.1.3?

回答

6

Hibernate文檔似乎聲明過濾器(類似於SQL視圖)是查看數據的可選方式,並不代表查看它的「默認」方式。我的建議是堅持使用where子句,併爲不希望過濾數據的用例編寫一個特殊的訪問程序。

我想另一種實現你所要求的方法是在你的「HibernateUtil」類中封裝啓用你的過濾器(假設你有這樣一個負責打開你的代碼使用的新會話的野獸) 。默認情況下,獲取新會話的方法將實例化會話,然後在返回之前啓用該過濾器。例如:

public Session newSession(){ 
    Session session = sessionFactory.openSession(); 
    // this assumes you don't have criteria to set depending on the context 
    session.enableFilter("yourFilter"); 
    return session; 
} 

然後在您的具體使用情況下,您可以disableFilter("yourFilter");

相關問題