【问题标题】:Grails - Adding a where clause to all domain objectsGrails - 向所有域对象添加 where 子句
【发布时间】:2012-06-18 16:11:20
【问题描述】:

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

where deleted = false

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

【问题讨论】:

标签: grails grails-orm where-clause


【解决方案1】:

我将Hibernate Filter plugin 用于此类事情。

【讨论】:

    【解决方案2】:

    我不认为 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 子句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多