Grails Hibernate Filters插件似乎正在工作,但没有过滤结果

时间:2013-03-07 10:12:42

标签: hibernate grails gorm hibernate-filters

我是Groovy和Grails的新手,但我对Hibernate非常熟悉。对于我正在处理的项目,我需要实现某些域类的软删除Hibernate Filters似乎是一个合适的解决方案,因为它允许我向我的域类添加一个条件,该条件将过滤掉软删除的记录,而无需我们手动为每个查询添加条件。幸运的是,Grails提供Hibernate Filter plugin,这样可以很容易地在Grails中使用Hibernate Filters。

不幸的是,正如你可能已经猜到的那样,我无法让它发挥作用。在调试时,所有内容似乎都已正确设置(过滤器被添加到实体中,过滤器正在会话等中启用)但是没有从结果中过滤掉任何内容。

我已经这样设置了:

BuildConfig.groovy

grails.project.dependency.resolution = {

    ...

    plugins {

        ...

        compile ":hibernate-filter:0.3.2"
    }
}

应用-Config.groovy中

import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration

dataSource {

    ...

    configClass = HibernateFilterDomainConfiguration
}

MyDomainClass.groovy

class MyDomainClass extends MySuperClass {

    ...

    Boolean deleted = false

    static hibernateFilters = {
        deletedFilter(condition:"deleted=0", default:true)
    }

    ...

}

MyController.groovy

def list() {

    ...

    myDomainInstances = MyDomainClass.list()
    [myDomainInstanceList: myDomainInstances, myDomainInstanceTotal: myDomainInstances.totalCount, ...]
}

使用上面的代码总是给我未经过滤的结果,即使一切似乎都配置正确。在调试应用程序启动时,我看到插件正在初始化,扫描我的域类并从中获取hibernateFilters属性。在此之后它正确地创建了Hibernate过滤器。收到请求时,我看到Grails过滤器启动,插件启用当前Hibernate会话中的所有默认过滤器(我的)。一切看起来都像我期望的那样(我看到在Hibernate的日志记录中启用了过滤器),除了结果(SQL日志记录支持我,WHERE没有添加deleted子句。

我已按照documentation页面上的说明操作,并尝试了以下操作:

我还尝试过以前版本的插件,甚至尝试使用插件函数(Foo.withHibernateFilters等)明确启用过滤器。

我仍然感到困惑,所以:有没有人可以使用Grails Hibernate Filter插件帮助我获得过滤结果?

二手软件版本:

  • Grails 2.1.3
  • Grails Hibernate 2.1.3
  • Grails Hibernate Filter 0.3.2
  • Java 1.7.0_11

1 个答案:

答案 0 :(得分:1)

Grails 2.1.3使用Hibernate版本3.6.10。 Hibernate 3不支持子类上的过滤器(例如,联合子类,连接子类)。在上面的示例中添加MySuperClass上的过滤器将起作用。 Hibernate 4.1.5.SP1及更新版本将支持子类的过滤器。

<强> MySuperClass.groovy

class MySuperClass {

    ...

    Boolean deleted = false

    static hibernateFilters = {
        deletedFilter(condition:"deleted=0", default:true)
    }

    ...

}

<强> MyDomainClass.groovy

class MyDomainClass extends MySuperClass {

    ...

}

不幸的是,上述内容未在Hibernate documentation regarding filters中正确记录。

更多信息: