dan*_*nez 21 java hibernate hibernate-envers
我正在为现有的hibernate实体添加envers.到目前为止,审计工作一切顺利,但查询是一个不同的问题,因为修订表没有填充现有数据.还有其他人已经解决了这个问题吗?也许您已经找到了一些方法来使用现有表填充修订表?我想我会问,我相信其他人会发现它很有用.
小智 14
我们通过运行一系列原始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
Run Code Online (Sandbox Code Playgroud)
请注意,REVTYPE值为0表示插入(与修改相反).
如果您使用Envers ValidityAuditStrategy并且已经创建了除启用Envers以外的数据,则此类别中存在问题.
在我们的例子中(Hibernate 4.2.8.Final),基本对象更新抛出"无法更新实体的先前版本和"(记录为[org.hibernate.AssertionFailure] HHH000099).
花了一些时间才发现这个讨论/解释,所以交叉发布:
你不需要.
AuditQuery允许您通过以下方式获取RevisionEntity和数据修订:
AuditQuery query = getAuditReader().createQuery()
.forRevisionsOfEntity(YourAuditedEntity.class, false, false);
Run Code Online (Sandbox Code Playgroud)
这将构造一个返回Object [3]列表的查询.Fisrt元素是您的数据,第二个是修订实体,第三个是修订类型.
归档时间: |
|
查看次数: |
10412 次 |
最近记录: |