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