Hibernateで挿入、更新、削除などの行の変更にリスナーを追加する方法を教えてください。Hibernateのデータベース変更にリスナーを追加するには?
0
A
答えて
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
);
}
}
しかし、これは、同じアプリケーション内での変更のために動作します。他の変更は追跡されません。これが必要な場合は、データベース・トリガーを使用する必要があります。
https://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/listeners.htmlをご覧ください。 – Ash