如何为Hibernate中的插入,更新,删除等行更改添加侦听器。
答案 0 :(得分: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
);
}
}
但这只适用于同一应用程序内的更改。其他更改未被跟踪。如果需要,可以使用数据库触发器。
答案 1 :(得分:2)
您可以使用JPA监听器@PostUpdate
,@PostPersist
,@PostRemove
(这些监听器可以在ORM框架中移植),您可以查看here了解JPA规范。
为一个调用PostPersist和postRemove回调方法 实体被持久化或删除后的实体。这些 还将对所有这些实体调用回调 操作是级联的。