首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Grails Hibernate过滤器插件似乎正在工作,但没有过滤结果。

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

Stack Overflow用户
提问于 2013-03-07 10:12:41
回答 1查看 1.2K关注 0票数 2

我对Groovy和Grails很陌生,但我对Hibernate相当熟悉。对于我正在进行的项目,我需要实现、软删除某些域类的Hibernate滤波器似乎是一个合适的解决方案,因为它允许我在域类中添加一个条件,它将过滤掉软删除的记录,而不需要我们手动向每个查询添加一个条件。幸运的是,Grails提供了一个Hibernate过滤器插件,可以方便地在Grails中使用Hibernate过滤器。

不幸的是,正如你可能已经猜到的那样,我无法让它开始工作。当调试一切看起来都正确的时候(过滤器被添加到实体中,过滤器在会话中被启用等等)。但是没有什么是从结果中过滤出来的。

我把它设成这样:

BuildConfig.groovy

代码语言:javascript
运行
复制
grails.project.dependency.resolution = {

    ...

    plugins {

        ...

        compile ":hibernate-filter:0.3.2"
    }
}

app-config.groovy

代码语言:javascript
运行
复制
import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration

dataSource {

    ...

    configClass = HibernateFilterDomainConfiguration
}

MyDomainClass.groovy

代码语言:javascript
运行
复制
class MyDomainClass extends MySuperClass {

    ...

    Boolean deleted = false

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

    ...

}

MyController.groovy

代码语言:javascript
运行
复制
def list() {

    ...

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

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

我遵循了文档页面上的说明,并尝试了以下操作:

我还尝试过这个插件的早期版本,甚至尝试使用插件函数(Foo.withHibernateFilters等)显式地启用过滤器。

但是我还是被困住了,所以:可以帮助我使用Grails插件获得过滤结果吗?

使用的软件版本:

  • Grails 2.1.3
  • 灰灰冬眠2.1.3
  • Grails Hibernate过滤器0.3.2
  • Java 1.7.0_11
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-12 06:15:25

Grails2.1.3使用Hibernate版本3.6.10。Hibernate 3不支持子类上的过滤器(例如联合子类、连接子类)。在上述示例中添加MySuperClass上的筛选器将有效。Hibernate 4.1.5.SP1和更新版本将支持子类上的筛选器。

MySuperClass.groovy

代码语言:javascript
运行
复制
class MySuperClass {

    ...

    Boolean deleted = false

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

    ...

}

MyDomainClass.groovy

代码语言:javascript
运行
复制
class MyDomainClass extends MySuperClass {

    ...

}

不幸的是,上面的内容并没有在关于过滤器的Hibernate文档中得到正确的记录。

更多信息:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15268370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档