我们目前在一个项目中使用 Envers,当我们查询一些分布在多个表中的审计数据时,性能会下降很多。
基本上,我们创建一个审计数据流,如下所示:
List<Object[]> auditStream = new LinkedList<Object[]>();
for (Class<?> entityClass : desiredEntityClasses) {
auditStream.addAll(
auditReader.createQuery()
.forRevisionsOfEntity(entityClass, false, true)
.add(AuditEntity
.revisionProperty("timestamp")
.ge(startTimestamp))
.getResultList());
}
除此之外,某些类型的实体(如嵌套实体)需要一些额外的审计信息。
对于少量数据(通过减少时间戳)的响应时间是合理的,但是在 500 个条目中auditStream
,大约需要 3 秒才能获得所有数据,这太长了。
Q1我想知道是否可以对这类查询启用批量获取以及如何启用?
Q2是否有某种方法可以优化查询,例如一次获取多种实体?