使用来自Hibernate实体的现有数据填充envers修订表

我将envers添加到现有的hibernate实体中。 到目前为止,审计工作一切正常,但查询是一个不同的问题,因为修订表没有填充现有数据。 其他人是否已经解决了这个问题? 也许你已经找到了一些方法来用现有的表格填充修订表格? 只是想我会问,我相信别人会觉得它有用。


你不需要。
AuditQuery允许您通过以下方式获得修订实体和数据修订:

AuditQuery query = getAuditReader().createQuery()
                .forRevisionsOfEntity(YourAuditedEntity.class, false, false);

这将构造一个返回Object [3]列表的查询。 Fisrt元素是您的数据,第二个是修订实体,第三个是修订类型。


我们通过运行一系列原始SQL查询来填充初始数据,以模拟“插入”所有现有实体,就像它们刚刚在同一时间创建一样。 例如:

insert into REVINFO(REV,REVTSTMP) values (1,1322687394907); 
-- this is the initial revision, with an arbitrary timestamp

insert into item_AUD(REV,REVTYPE,id,col1,col1) select 1,0,id,col1,col2 from item; 
-- this copies the relevant row data from the entity table to the audit table

请注意, REVTYPE值为0表示插入(与修改相反)。


如果您使用Envers ValidityAuditStrategy并且创建的数据与启用了Envers的数据不同,那么您将在此类别中遇到问题。

在我们的例子中(Hibernate 4.2.8.Final),一个基本的对象更新抛出了“无法更新实体和以前的版本”(记录为[org.hibernate.AssertionFailure] HHH000099)。

花了我一段时间找到这样的讨论/解释如此交叉发布:

ValidityAuditStrategy没有审计记录

链接地址: http://www.djcxy.com/p/71547.html

上一篇: Populate envers revision tables with existing data from Hibernate Entities

下一篇: How to popup a confirmation box on condition on ASPX page?