2

レガシーデータベースに接続するGrailsアプリケーションがあります。このデータベースにはdeleted、エンティティが削除されたかどうかを示す列があります(つまり、データがテーブルから実際に削除されることはなく、一定の時間が経過するとアーカイブされます)。 )。ドメインオブジェクトごとに、次のような自動where句を追加します。

where deleted = false

そのため、アプリケーション内のすべてのクエリにこれを明示的に追加する必要はありません。グレイルでこれを達成する方法はありますか?

4

2 に答える 2

4

私はこれらの種類のものにHibernateFilterプラグインを使用します。

于 2012-06-18T17:10:53.107 に答える
1

GORMがこれを直接サポートしているとは思いません。ただし、Hibernateインターセプターを利用して、自分で追加することはできます。特に、onPrepareStatementフックを使用して、休止状態が生成する各クエリに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)
}

where残念ながら、句を挿入する場所を見つけるために、着信SQLステートメントを解析する必要があります。

于 2012-06-18T16:59:32.140 に答える