2016-06-12 45 views
0

知られているように、Hibernateはダーティチェックを使用します。つまり、DB内では、プログラムのエンティティで変更されたフィールドのみが変更されます。どのフィールドが変更されたかを知るには?古い値を取得できますか?Hibernateのダーティチェック

+0

いいえ、それはありません。少なくともデフォルトではありません。そして、それはエンティティの古い状態を公開しません。あなたがそれをする必要がある場合は、あなた自身でそれを行う必要があります。 –

+0

@JBNizet古い状態は、イベントリスナーを介して使用できます。 – Naros

答えて

1

org.hibernate.event.spiに一連のイベントリスナーSPIがあり、SessionFactoryの構築中に実装して登録することができます。ここで、あなたが求めている状態情報を取得できます。たとえば、

public class MyPreUpdateEventListener implements PreUpdateEventListener { 
    @Override 
    public boolean onPreUpdate(PreUpdateEvent event) { 
    Object[] newState = event.getState(); 
    Object[] oldState = event.getOldState(); 
    /* from this point, you'd need to determine the differences yourself */ 
    } 
} 
関連する問題