使用休眠实体中的现有数据填充 envers 修订表

2022-09-01 15:58:24

我正在向现有的休眠实体添加 envers。就审核而言,一切都很顺利,但是查询是另一个问题,因为修订表没有用现有数据填充。还有其他人已经解决了这个问题吗?也许您已经找到了一些用现有表填充修订表的方法?我只是想问,我相信其他人会发现它很有用。


答案 1

我们通过运行一系列原始 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 表示插入(而不是修改)。


答案 2

如果您使用的是 Envers ValidityAuditStrategy,并且拥有在启用 Envers 的情况下创建的数据,则此类别中会遇到问题。

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

我花了一段时间才找到这个讨论/解释,所以交叉发布:

有效性审计策略,无审计记录


推荐