2016-11-08 16 views

答えて

2

あなたはJPAリスナー@PostUpdate@PostPersist@PostRemove(これらはORMフレームワーク間で移植されている)を使用することができますし、JPA仕様のためhereを見ることができます。

エンティティが永続化または削除された後で、 エンティティのPostPersistおよびpostRemoveコールバックメソッドが呼び出されます。これらの コールバックは、これらの操作がカスケードされているすべてのエンティティに対しても呼び出されます。

3

Hibernate Interceptorsを使用できます。ここで(直接Hibernateのドキュメントから取られた)更新をログに記録する例です。

public static class LoggingInterceptor extends EmptyInterceptor { 
    @Override 
    public boolean onFlushDirty(
     Object entity, 
     Serializable id, 
     Object[] currentState, 
     Object[] previousState, 
     String[] propertyNames, 
     Type[] types) { 
      LOGGER.debugv("Entity {0}#{1} changed from {2} to {3}", 
       entity.getClass().getSimpleName(), 
       id, 
       Arrays.toString(previousState), 
       Arrays.toString(currentState) 
      ); 
      return super.onFlushDirty(entity, id, currentState, 
       previousState, propertyNames, types 
     ); 
    } 
} 

しかし、これは、同じアプリケーション内での変更のために動作します。他の変更は追跡されません。これが必要な場合は、データベース・トリガーを使用する必要があります。