Bra*_*ace 8 jpa hibernate-envers
存储修订数据的方式每个受修订影响的对象在_AUD表中获得单独的记录.所以,当我搜索的修订影响的对象A,我会回来这里的修订是入门3的对象B,但如果对象A和/或C进行改版中也发生了变化3,这些条目都没有回来,给人的印象是B在修改的唯一对象那次修改.我正在尝试做的是每个修订影响对象B,返回受该修订影响的所有对象.
something_AUD desired actual id|REV id|REV id|REV ------------- ------- ------ A|1 B|2 B|2 B|2 B|3 B|3 B|3 C|3 C|3
我一直在尝试通过运行初始查询来查找相关修订:
AuditQuery query = AuditReaderFactory.get(entity.em()).createQuery()
.forRevisionsOfEntity(type, false, true)
.add(AuditEntity.id().eq(entity.id));
Run Code Online (Sandbox Code Playgroud)
然后为每个结果运行以下查询:
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();
Run Code Online (Sandbox Code Playgroud)
但这导致了QuerySyntaxException:
别名'r'的重复定义[从models中选择e,r,r .AgentShift_AUD e,models.RevisionData r,models.RevisionData r其中e.originalId.REV.id在(:_p0)和e.originalId.REV.id中= r.id和e.originalId.REV.id in(:_p1)和e.originalId.REV.id = r.id order by e.originalId.REV.id asc,e.originalId.REV.id asc]
我已经尝试了几种变体,这些变体都导致了相同的"别名'r'的重复定义".还有什么我可以尝试的吗?
这是我到目前为止所想到的。它不是最干净的解决方案,但它有效:
AuditReader reader = AuditReaderFactory.get(entity.em());
AuditQuery query = reader.createQuery()
.forRevisionsOfEntity(type, false, true)
.add(AuditEntity.id().eq(entity.id));
List<Object[]> raw_results = query.getResultList();
List<Object[]> complete_results = new ArrayList<Object[]>(raw_results.size());
for (Object[] data : raw_results) {
int rev_id = ((RevisionData) data[1]).getId();
AuditQuery q = reader.createQuery()
.forRevisionsOfEntity(type, false, true)
.add(AuditEntity.revisionNumber().eq(rev_id));
List<Object[]> real_data = q.getResultList();
complete_results.addAll(real_data);
}
Run Code Online (Sandbox Code Playgroud)
希望有人能想出一种更好的方法,尤其是可以在单个查询中完成的方法。
| 归档时间: |
|
| 查看次数: |
6323 次 |
| 最近记录: |