Способ хранения данных ревизии, каждый объект, затронутый ревизией, получает отдельную запись в таблице _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'». Можно ли еще что-нибудь попробовать?