【发布时间】:2011-10-20 05:45:23
【问题描述】:
修订数据的存储方式 每个受修订影响的对象都会在_AUD 表中获得单独的记录。因此,当我搜索影响对象A 的修订时,我将返回对象B 的修订为3 的条目,但如果对象A 和/或C 在修订3 中也发生了更改,这些条目不会返回,给人的印象是B 是该修订版中唯一修改的对象。我要做的是对于影响对象B 的每个修订版,返回受该修订版影响的所有对象。
我一直试图通过运行初始查询来查找相关修订来做到这一点:
AuditQuery query = AuditReaderFactory.get(entity.em()).createQuery()
.forRevisionsOfEntity(type, false, true)
.add(AuditEntity.id().eq(entity.id));
然后为每个结果运行以下查询:
int rev_id = ((RevisionData) data[1]).getId();
AuditQuery q = AuditReaderFactory.get(JPA.em()).createQuery()
.forRevisionsOfEntity(type, false, true)
.add(AuditEntity.revisionNumber().eq(rev_id));
List<Object[]> real_data = q.getResultList();
但这会导致QuerySyntaxException:
别名'r'的重复定义[select e, r, r from models.AgentShift_AUD e、models.RevisionData r、models.RevisionData r 其中 e.originalId.REV.id in (:_p0) 和 e.originalId.REV.id = r.id 和 e.originalId.REV.id in (:_p1) and e.originalId.REV.id = r.id order by e.originalId.REV.id asc, e.originalId.REV.id asc]
我已经尝试了几种变体,这些变体都导致了相同的“别名'r'的重复定义”。还有什么我可以尝试的吗?
【问题讨论】:
-
不确定您的意思:“但如果其他实体也受到这些修订的影响,则不会返回这些条目”。一个示例将有助于了解您想要实现的目标以及您面临的问题。
-
更新后添加:我认为您不能使用 envers api 做到这一点,您必须使用 JPA,因为您尝试在单个查询中从多个表中查询:@ 987654321@
-
实体
B是否与实体A和C有某种关系关联?
标签: jpa hibernate-envers