リビジョン データが保存される方法は、リビジョンの影響を受ける各オブジェクトが_AUD
テーブル内の個別のレコードを取得します。したがって、 object に影響を与えるリビジョンを検索するとA
、リビジョンが3
objectのエントリが返されますB
が、オブジェクトA
および/またはC
リビジョン で変更された場合3
、それらのエントリは返されず、B
変更された唯一のオブジェクトであるという印象を与えますそのリビジョン。私がやろうとしているのは、オブジェクトに影響を与える各リビジョンに対してB
、そのリビジョンの影響を受けるすべてのオブジェクトを返すことです。
something_AUD 希望の実際の 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' の重複定義 [models.AgentShift_AUD e、models.RevisionData r、models.RevisionData r から e、r、r を選択します。ここで、(:_p0) の e.originalId.REV.id と e.originalId.REV.id = r.id および e.originalId.REV.id in (:_p1) および e.originalId.REV.id = r.id e.originalId.REV.id asc、e.originalId.REV.id asc による順序]
これのいくつかのバリエーションを試しましたが、すべて同じ「エイリアス 'r'の重複定義」につながりました。他に試せることはありますか?