2

私の grails アプリケーションでは、一部のドメイン クラスはユーザーによって変更されることはありません。

ただし、メンテナンス作業が必要な場合があり、管理者は時々 (年に 2 回としましょう) 少数のインスタンスを作成/編集できる必要があります。

これらのドメイン クラス ( ) に対して読み取り専用の第 2 レベル キャッシュ戦略を設定したいとstatic mapping = { cache usage: 'read-only' }考えています。また、Grails スキャフォールディングを介して一部のインスタンスを更新するために、読み取り専用戦略を (非常に特殊な状況で) '無効' にできるようにしたいと考えています。ビューを編集します。

出来ますか?あなたは私に何をするようにアドバイスしますか?

編集:私が実装しているソリューションは、パスカルとバートの回答を組み合わせたものです(コメントを参照)。どちらの回答も素晴らしく、役に立ちます。だから、受け入れられた答えを選ぶのにジレンマがありました!とにかくありがとうございました。

4

2 に答える 2

3

おそらく可能ですが、おそらく自明ではありません。groovy.sql.Sql を使用して直接挿入します。検証は失われますが、インスタンスを作成して検証することはできますが、save() を呼び出すことはできません。次に、問題がなければ SQL 挿入を実行します。

def thing = new Thing(params)
if (thing.validate()) {
   new Sql(dataSource).executeInsert(
             "insert into thing(name) values(?)", [params.name])
}
else {
   // report validation error
}
于 2010-02-10T23:14:54.047 に答える
3

純粋な SQLを使用して特定のエンティティに対して更新を実行し、必要なevict()メソッド呼び出しを行ってSessionFactory、特定のエンティティを第 2 レベルのキャッシュから削除します。を使用して、コレクションからエンティティを削除する必要がある場合があることに注意してくださいevictCollection()。エビクションの詳細については、この素敵なブログ投稿を確認してください。

wipeBooksFromGlobalCache()管理者があなたが言及している非常に特定の状況で呼び出すことができるよりも、これらすべてをサービス (例: ) にカプセル化します。

于 2010-02-10T23:31:20.657 に答える