我们有一个连接到遗留数据库的 Grails 应用程序,其中每个表都有一个名为的列deleted
,指示实体是否已被删除(这意味着数据实际上从未从表中删除,它会在一定时间后存档)。对于我们的每个域对象,我们希望添加一个自动where
子句,如下所示:
where deleted = false
这样我们就不必将其显式添加到应用程序中的每个查询中。有没有办法在 grails 中实现这一点?
我们有一个连接到遗留数据库的 Grails 应用程序,其中每个表都有一个名为的列deleted
,指示实体是否已被删除(这意味着数据实际上从未从表中删除,它会在一定时间后存档)。对于我们的每个域对象,我们希望添加一个自动where
子句,如下所示:
where deleted = false
这样我们就不必将其显式添加到应用程序中的每个查询中。有没有办法在 grails 中实现这一点?
我使用Hibernate Filter 插件来处理这些事情。
我不认为 GORM 直接支持这一点。但是,您可以利用 hibernate 拦截器并自己添加它。特别是,您可以使用onPrepareStatement
钩子将 where 子句添加到 hibernate 生成的每个查询中。例如:
// 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
子句。