使用来自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?