Grails - 为所有域对象添加where子句

时间:2012-06-18 16:11:21

标签: grails gorm where-clause

我们有一个连接到遗留数据库的Grails应用程序,其中每个表都有一个名为deleted的列,它指示实体是否已被删除(这意味着数据实际上从未从表中删除,它在一定时间后获得存档)。对于我们的每个域对象,我们希望添加一个自动where子句,如下所示:

where deleted = false

这样我们就不必将其显式添加到应用程序中的每个查询中。有没有办法在grails中实现这一目标?

2 个答案:

答案 0 :(得分:4)

我使用Hibernate Filter plugin来做这些事情。

答案 1 :(得分:1)

我不认为GORM直接支持这一点。但是,您可以利用hibernate拦截器并自行添加它。特别是,您可以使用onPrepareStatement钩子为hibernate生成的每个查询添加where子句。例如:

// src/groovy/mypackage/MyEntityInterceptor.groovy
package mypackage
class MyEntityInterceptor extends org.hibernate.EmptyInterceptor {
    String onPrepareStatement(String sql) {
        return addNotDeletedClause(sql)
    }
}
// grails-app/conf/spring/resources.groovy
beans = {
    entityInterceptor(MyEntityInterceptor)
}

不幸的是,您必须解析传入的SQL语句以找出插入where子句的位置。