Способ хранения данных ревизии Каждый объект, затронутый ревизией, получает отдельную запись в таблице _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 по возрастанию, e.originalId.REV.id по возрастанию]
Я пробовал несколько вариантов этого, и все они привели к одному и тому же «Дублирующемуся определению псевдонима« r »». Есть ли что-нибудь еще, что я могу попробовать?
B
какая-либо связь с объектамиA
иC
? - person Naros   schedule 07.02.2017