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

Grails Hibernate过滤器插件似乎正在工作,但没有过滤结果,hibernate,grails,gorm,hibernate-filters,Hibernate,Grails,Gorm,Hibernate Filters,我不熟悉Groovy和Grails,但我对Hibernate非常熟悉。对于我正在进行的项目,我需要实现某些域类的软删除。似乎是一个合适的解决方案,因为它允许我向我的域类添加一个条件,这将过滤掉软删除的记录,而无需我们手动向每个查询添加一个条件。幸运的是,Grails提供了一个可以让在Grails中使用Hibernate过滤器变得容易的方法 不幸的是,正如你可能猜到的,我无法让它工作。调试时,所有内容似乎都已正确设置(将筛选器添加到实体中,在会话中启用筛选器等),但结果中没有筛选任何内容 我是这样

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

不幸的是,正如你可能猜到的,我无法让它工作。调试时,所有内容似乎都已正确设置(将筛选器添加到实体中,在会话中启用筛选器等),但结果中没有筛选任何内容

我是这样设置的:

BuildConfig.groovy

grails.project.dependency.resolution = {

    ...

    plugins {

        ...

        compile ":hibernate-filter:0.3.2"
    }
}
import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration

dataSource {

    ...

    configClass = HibernateFilterDomainConfiguration
}
class MyDomainClass extends MySuperClass {

    ...

    Boolean deleted = false

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

    ...

}
def list() {

    ...

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

    ...

    Boolean deleted = false

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

    ...

}
class MyDomainClass extends MySuperClass {

    ...

}
app config.groovy

grails.project.dependency.resolution = {

    ...

    plugins {

        ...

        compile ":hibernate-filter:0.3.2"
    }
}
import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration

dataSource {

    ...

    configClass = HibernateFilterDomainConfiguration
}
class MyDomainClass extends MySuperClass {

    ...

    Boolean deleted = false

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

    ...

}
def list() {

    ...

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

    ...

    Boolean deleted = false

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

    ...

}
class MyDomainClass extends MySuperClass {

    ...

}
MyDomainClass.groovy

grails.project.dependency.resolution = {

    ...

    plugins {

        ...

        compile ":hibernate-filter:0.3.2"
    }
}
import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration

dataSource {

    ...

    configClass = HibernateFilterDomainConfiguration
}
class MyDomainClass extends MySuperClass {

    ...

    Boolean deleted = false

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

    ...

}
def list() {

    ...

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

    ...

    Boolean deleted = false

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

    ...

}
class MyDomainClass extends MySuperClass {

    ...

}
MyController.groovy

grails.project.dependency.resolution = {

    ...

    plugins {

        ...

        compile ":hibernate-filter:0.3.2"
    }
}
import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration

dataSource {

    ...

    configClass = HibernateFilterDomainConfiguration
}
class MyDomainClass extends MySuperClass {

    ...

    Boolean deleted = false

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

    ...

}
def list() {

    ...

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

    ...

    Boolean deleted = false

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

    ...

}
class MyDomainClass extends MySuperClass {

    ...

}
使用上面的代码总是给我未过滤的结果,即使一切似乎都配置正确。调试应用程序启动时,我看到插件正在初始化,正在扫描我的域类并从中提取hibernateFilters属性。在此之后,它会正确地创建Hibernate过滤器。当收到请求时,我看到Grails过滤器启动,插件在当前Hibernate会话中启用所有默认过滤器(我的是)。除了结果(SQL日志在这里为我提供了备份,没有
,其中为
删除的
添加了
子句)

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

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

不过我还是被卡住了,所以:有人能帮我使用Grails Hibernate过滤器插件获得过滤结果吗?

使用的软件版本:

  • Grails2.1.3
  • Grails Hibernate 2.1.3
  • Grails Hibernate过滤器0.3.2
  • Java 1.7.0_11

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

MySuperClass.groovy

grails.project.dependency.resolution = {

    ...

    plugins {

        ...

        compile ":hibernate-filter:0.3.2"
    }
}
import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration

dataSource {

    ...

    configClass = HibernateFilterDomainConfiguration
}
class MyDomainClass extends MySuperClass {

    ...

    Boolean deleted = false

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

    ...

}
def list() {

    ...

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

    ...

    Boolean deleted = false

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

    ...

}
class MyDomainClass extends MySuperClass {

    ...

}
MyDomainClass.groovy

grails.project.dependency.resolution = {

    ...

    plugins {

        ...

        compile ":hibernate-filter:0.3.2"
    }
}
import org.grails.plugin.hibernate.filter.HibernateFilterDomainConfiguration

dataSource {

    ...

    configClass = HibernateFilterDomainConfiguration
}
class MyDomainClass extends MySuperClass {

    ...

    Boolean deleted = false

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

    ...

}
def list() {

    ...

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

    ...

    Boolean deleted = false

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

    ...

}
class MyDomainClass extends MySuperClass {

    ...

}
不幸的是,上述内容没有在文档中正确记录

更多信息:


我在插件的问题跟踪程序中添加了一个问题: