我使用hibernate-envers 4.1.8最后
我的: org.hibernate.envers.store_data_at_delete=true
我希望当我删除基表中的记录时,新记录将插入到具有相同列和相同数据的table_aud中。但是没有!除了revtype和rev外,未插入table_aud的数据
换句话说,上面的配置不能正常工作!有人能帮我吗?
发布于 2017-06-19 13:56:20
根据您的注释,问题在于您使用HQL是为了删除实体引用,而不是使用在EntityManager /会话上指定的两个删除方法:
session.delete(Object)entityManager.remove(Object)使用JPQL或HQL语句时,Hibernate不会引发特定事件,因此不会通知侦听这些事件的集成。在本例中,不会引发post-delete事件,因此您从未看到为RevisionType.DEL条目添加REVTYPE行的原因。
使用上述两种方法中的任何一种将解决您的问题。
这里的驱动因素是HQL / JPQL语句可以充当批量操作,就像JPA对CriteriaDelete和CriteriaUpdate的意图一样。这些操作的目的是将DML操作大规模应用于数据库对象,而不需要持久化提供者将实体状态加载到持久性上下文中。
考虑一下您正在尝试的用例。假设您的实体没有从数据库中加载,您只需调用DELETE FROM YourEntity WHERE id = :id。在这种情况下没有加载实体状态,因此如果要触发事件,已知的唯一相关信息是:
id的属性,具有由:id指定的给定值。在这种情况下,属性可能是主键,但它很容易成为该实体类上的任意属性,因此,如果不首先用实体状态初始化持久性上下文,就没有有效的方法来审计这样的用例。这将是一种浪费的操作,特别是对于DELETE操作,如果操作是针对大量行的话。
希望,这提供了一些洞察力,为什么你会看到你所做的。
https://stackoverflow.com/questions/43962531
复制相似问题