2012-03-09 1 views
3

たちはbeforeUpdateOf *持っているのBeforeUpdate afterUpdate

と別の質問(*いくつかのフィールドである?):

デフのBeforeUpdate = {log.info( "のBeforeUpdateで" + this.status)}

DEF afterUpdate = {log.info( "afterUpdateで" + this.status)}

この両方が同じステータスを与えます。 オブジェクトの実際の状態(これは)xからyに更新されているが

答えて

0

あなたはGrailsの監査プラグインを見てしたいことがあります。Audit Loggingとプロパティが変更されたときにはイベントがありませんAudit Trail

3

が、あなた

class MyDomainClass { 
    String status 

    void setStatus(String status) { 
     this.status = status 
     // do something based on changed value 
    } 
} 

Hibernateは、データベースに変更された値を保存するときに、これらのコールバックがためのものですので、あなたがbeforeUpdateafterUpdateで同じ値を見ている:何かを明示的にセッターに追加することができます。 Hibernateが開始して更新を完了するまでの間に値が変更されることは珍しいことです。

あなたは、データベースから元の値を探しているなら、それはhttp://grails.org/doc/latest/ref/Domain%20Classes/getPersistentValue.html

+1

がヒントをありがとう使用して利用可能です! "this.status = status"が無限再帰を引き起こしても注意してください。私は私の場合、super.setStatus(newStatus)を呼び出すことを解決しました。 –

関連する問題