首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate Envers删除模式

Hibernate Envers删除模式
EN

Stack Overflow用户
提问于 2017-05-14 09:48:09
回答 1查看 1.7K关注 0票数 1

我使用hibernate-envers 4.1.8最后

我的: org.hibernate.envers.store_data_at_delete=true

我希望当我删除基表中的记录时,新记录将插入到具有相同列和相同数据的table_aud中。但是没有!除了revtype和rev外,未插入table_aud的数据

换句话说,上面的配置不能正常工作!有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 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对CriteriaDeleteCriteriaUpdate的意图一样。这些操作的目的是将DML操作大规模应用于数据库对象,而不需要持久化提供者将实体状态加载到持久性上下文中。

考虑一下您正在尝试的用例。假设您的实体没有从数据库中加载,您只需调用DELETE FROM YourEntity WHERE id = :id。在这种情况下没有加载实体状态,因此如果要触发事件,已知的唯一相关信息是:

  • 实体类型
  • 一些名为id的属性,具有由:id指定的给定值。

在这种情况下,属性可能是主键,但它很容易成为该实体类上的任意属性,因此,如果不首先用实体状态初始化持久性上下文,就没有有效的方法来审计这样的用例。这将是一种浪费的操作,特别是对于DELETE操作,如果操作是针对大量行的话。

希望,这提供了一些洞察力,为什么你会看到你所做的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43962531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档