2009-12-15 166 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");

相关问题