我创建了一个过滤器来申请特定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会话,这将启用过滤器。
答案 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/