grailsドメインクラスでbeforUpdateイベントを実装しようとしています.Domains属性の古い値と新しい値の両方を監査する必要があります。 isDirty
のチェックを使用するか、Domain.dirtyPropertyNames
を使用してドメイン内の汚れているプロパティのリストを返すことができます。そしてgetPersistentValue
は両方の値を持つことができるようにテーブル内の古い値を取得します。grailsで更新されたドメインプロパティの古い値を取得する
これを実装するには、ドメインクラスでbeforUpdateイベントを使用し、そこからログサービスを呼び出し、ユーザーのIDドメイン。今このIDを使用して私はサービスでユーザーインスタンスを取得し、上記の指定されたメソッドを使用して任意のフィールドが汚れていないかどうかを確認できますか? UserControllerのupdate defで実際にUpdateを行っているときにAuditを記録する必要がありますか?
どちらが良い方法ですか?
私は、この場合は適切なアプローチを確認したい。..
また、他のどのような私が世話をするために必要なもの、のように:
1)属性は、ドメインオブジェクト参照ではなく、単純なタイプである場合。
2)ドメインクラスからのサービス呼び出しでこれを実装しようと思って、休止状態のセッションをフラッシュしないように気をつける必要がある他のもの。
よろしく、
Priyank
編集:私はサービスのメソッドで
def beforeUpdate = {
GraauditService service = AH.getApplication().getMainContext().getBean(''graauditService)
service.saveUserUpdateEntry(this.id); // id property of User domain...
}
は私が..私は更新アクティビティはログを監査するユーザードメインのBeforeUpdateイベントでこれを試してみました:
def saveUserUpdateEntry(Long id){
User grauser = User.get(id);
println ("user="+ grauser)
println "Dirty Properties -: ${grauser.dirtyPropertyNames}"
println "Changed value for firstName = -: ${ grauser.firstName}"
println "Database value for firstName = -: ${ grauser.getPersistentValue('firstName')}"
}
私は姓、ファーストネーム、電子メール用のUIからアップデートをしようと、コンソール上で以下のようになります。
user=com.gra.register.User : 1
Dirty Properties -: [eMail, firstName, lastName]
Changed value for firstName = -: sefser
Database value for firstName = -: administer
user=com.gra.register.User : 1
Dirty Properties -: []
Changed value for firstName = -: sefser
Database value for firstName = -: sefser
possible nonthreadsafe access to session
私が知っていることはできませんよ:
1)なぜ私は2セットを取得しています...二回前に一度コミットと呼ばれるイベントがあると、一度コミット後... ??
2)どのようにHibernateの例外を削除するか、ハンドルに(関数の中でwithNewセッションを使用しようとしたが、違いはありません事前に
おかげ..
このpri_devを実行するにはさまざまな方法がありますが、最適なアプローチはおそらくビジネス要件が何であるかによって決まります。ログに記録されたすべての変更、または変更されたプロパティのみを変更しますか?このオブジェクトの更新頻度はどれくらいですか?これらの変更をGORMによってマッピングされたデータベース、ログファイルなどに永続化する予定ですか? –
はい、私はデータベースのAuditLogドメインに追加したい、私はbeforeUpdateとその投げている休止状態例外からサービスへの簡単な呼び出しをしようとしました。私は編集セクションを追加しました –
ドメインの2-3の属性を更新してsave()を呼び出すと、beforUpdateイベントが呼び出されますが、保存イベントとも呼ばれます。 createとupdateの両方がdomain.save()への呼び出しなので、私はHibernateが既存のドメインの新しいCreationとUpdateに基づいて異なるイベントを発生させるほどスマートであるかどうかを知りたいと思います。 –