3

我创建了一个过滤器来申请特定 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(criteria) 被触发时,再次获取休眠会话,从而启用过滤器。

4

1 回答 1

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/

于 2016-06-19T20:01:23.807 回答