如何在Hibernate中添加数据库更改的监听器?

时间:2016-11-08 13:47:37

标签: java sql hibernate servlets

如何为Hibernate中的插入,更新,删除等行更改添加侦听器。

2 个答案:

答案 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回调方法   实体被持久化或删除后的实体。这些   还将对所有这些实体调用回调   操作是级联的。