hibernate - 使grails hibernate 过滤器

标签 hibernate grails filter zk

嗨,我正在使用Grails filter plugin

我正在尝试如下定义默认过滤器

// Defined inside the Book entity
static hibernateFilters = {
    activeFilter(condition:'active=1', default:true)
}

当我运行集成测试时,过滤器不适用于动态查找器方法,例如
Book.findAll()

如果我在BootStrap.groovy类中添加以下行
Book.enableHibernateFilter('activeFilter')

然后应用过滤器。

但是,在运行应用程序时,无论是否在BootStrap.groovy中使用以上代码,都不会应用过滤器

有任何想法吗 ?

经过一番挖掘后,我发现了

休眠过滤器插件在没有zkgrails插件的情况下可以很好地工作,但是两者似乎无法一起工作:(

下面的代码片段似乎是我的问题。

我认为我们这里可能有两个问题

1)最初执行到
全部( Controller :'', Action :'')

在应用程序启动期间仅一次。我认为每次有新的请求并因此有新的 session 时,它应该到达那里。

2)即使经过某种修改后以某种方式到达那里,我也不认为它会过去
全部( Controller :'', Action :'')

Composer 在zkoss中使用
class HibernateFilterFilters {

    def filters = {
        all(controller:'*', action:'*') {
            before = {
                def session = grailsApplication.mainContext.sessionFactory.currentSession
                DefaultHibernateFiltersHolder.defaultFilters.each {name ->
                    session.enableFilter(name)
                }
            }
            after = {

            }
            afterView = {

            }
        }
    }

}

最佳答案

经过一番挖掘后,我想出了解决上述问题的方法

我基本上扩展了GrailsOpenSessionInViewFilter类

public class OpenSessionInViewFilterExt extends GrailsOpenSessionInViewFilter{
@Override
protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
    Session session = super.getSession(sessionFactory);
    for (Object filterName : DefaultHibernateFiltersHolder.getDefaultFilters()) {
        session.enableFilter((String) filterName);
    }
    return session;
}

}

我在web.xml中也有一个条目
    <filter>
        <filter-name>OpenSessionInViewFilterExt</filter-name>
        <filter-class>com.nthdimenzion.hibernate.ext.OpenSessionInViewFilterExt</filter-class>
</filter>


<filter-mapping>
    <filter-name>OpenSessionInViewFilterExt</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

现在,每次创建新 session 时,都会为其启用默认过滤器。我认为这应该可行,但是最好是可以对zkgrails插件或休眠过滤器插件进行一些更改,以使两者可以在一个应用程序中共存:)

谢谢

关于hibernate - 使grails hibernate 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6113436/

相关文章:

java - 标识触发 DataIntegrityViolationException 的约束名称

session - Grails Quartz 插件 : Call service from cron (Session = NULL)

postgresql - 非maven项目中带有postgresql的grails

grails - Grails域对象未在gsp中刷新

java - 使用 Java lambda 的外部可配置过滤

java - 使用 Hibernate 执行 Oracle 存储过程

hibernate - Hibernate 中的类型安全命名 native 查询

java - Hibernate.unproxy 有任何副作用吗?

javascript - 选择 rxjs 中重复的第一项

iphone - 如何将夜视滤镜应用于 AVCaptureSession 预览层?