在休眠会话中禁用过滤器

时间:2013-04-16 09:17:25

标签: java hibernate hibernate-filters

我创建了一个过滤器来申请特定bean的会话。每次提取会话时都启用过滤器:

@Override
protected final Session getHibernateSession() {
   enableFilter("filterName",
         "parameterName", "parameterValue");
   return super.getHibernateSession();
}

现在我希望针对特定查询,不需要启用此过滤器。存在禁用过滤器的选项,但我无法找到正确的位置。我试过了:

DetachedCriteria criteria = criteria();
// some restrictions and projections
disableFilter("filterName")
return find(criteria);

问题是,当触发find(标准)时,再次获取hibernate会话,这将启用过滤器。

1 个答案:

答案 0 :(得分:2)

我认为您已经创建了启用和禁用过滤器的单独方法。

您必须在find(criteria)方法本身中禁用过滤器。 而不是做:

getHibernateSession().createQuery(somequery);

你必须做这样的事情:

Session session = getHibernateSession();
session.disableFilter("filterName");
session.createQuery(somequery);

这应该有效。我还找到了一个可以帮助的链接: https://www.tikalk.com/posts/2013/01/28/how-to-activate-and-deactivate-hibernate-filters/