Способ хранения данных редакции: каждый объект, на который влияет редакция, получает отдельную запись в таблице _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));
, а затем выполнить следующий запрос для каждого результата:
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' [выберите e, r, r из
models.AgentShift_AUD e, models.RevisionData r, models.RevisionData r
где e.originalId.REV.id в (: _p0) и e.originalId.REV.id = r.id и
e.originalId.REV.id в (: _p1) и e.originalId.REV.id = r.id упорядочить по
e.originalId.REV.id asc, e.originalId.REV.id asc]
Я пробовал несколько вариантов этого, которые привели к одному и тому же «Дублирующему определению псевдонима« r »». Могу ли я попробовать что-нибудь еще?