Hibernate envers -在同一查询中获取修订时间戳和审计实体

2ledvvac  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(151)

我开始使用hibernate envers(5.3.28),它工作正常。5.3.28由于我的JEE环境。实体被注解,表格被创建(使用ddl 2“create”进行开发),审计记录将被写入。
使用AuditReaderFactory在“垂直”和“水平”层中处理审计数据。
我的问题是垂直层。
我获取特定ID的审计实体(工作正常)。
我用

List<Service> services = AuditReaderFactory.get(em).createQuery().forRevisionsOfEntity(Service.class, true, true)
    .add(AuditEntity.id().eq(serviveId)).getResultList();

我还想在同一个查询中得到修订时间戳(另外,我在这里卡住了)。
我试过使用.addProjection。所以我可以得到修订时间戳(互联网上有很多例子)。它工作。但我也希望整个实体作为对象。
类似于"SELECT r.timestamp, s FROM Service s ....."。所以“s”是实体加上时间戳。
AuditEntity.selectEntity(false)不一样,它只是我的实体的哈希结构。
有什么提示吗?
Uwe/德国

a9wyjsp7

a9wyjsp71#

我自己找到了解决方案,看了看envers源代码/docu。
只是使用一个'AuditQuery'没有任何投影。

AuditQuery q = AuditReaderFactory.get(em).createQuery().forRevisionsOfEntity(Service.class, false, true);
List<?> results = q.getResultList();
for ( Object row : results) {
   Object[] array = (Object[]) row;
   System.out.println("  array: " + array.length);
   System.out.println("    0: " + array[0].getClass() + " = " + array[0]);
   System.out.println("    1: " + array[1].getClass() + " = " + array[1]);
   System.out.println("    2: " + array[2].getClass() + " = " + array[2]);
}

你将得到有三个条目的对象数组。

0: class mypackage.Service = <my data> from toString
1: class org.hibernate.envers.DefaultRevisionEntity$HibernateProxy$rRq8ZPJf = DefaultRevisionEntity(id = 2, revisionDate = 12.05.2023, 10:12:17)
2: class org.hibernate.envers.RevisionType = ADD

相关问题