Ich benutze Hibernate Envers für Auditing und habe ein Problem mit zusammengesetzten Primärschlüssel. Ich habe viele bis viele Entitäten mit zusammengesetzten Primärschlüssel basierend auf den zugehörigen Eigenschaften. Das Konstrukt ist wie folgt:Hibernate Envers Composite Primärschlüssel relatedId Anfrage
@Entity
@Audited
@Table(indexes = { @Index(columnList = "person_id"),
@Index(columnList = "document_id") })
public class PersonDocument implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Document document;
@Id
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Person person;
Die Beziehung ist nicht bidirektional kommentiert. Der Primärschlüssel wird in den überprüften Tabellen korrekt verwendet, wie in der Enver-Dokumentation beschrieben.
Aber jetzt würde ich alle Revisionen, die sich auf die Person bezieht. Mit folgenden:
final AuditQuery query = AuditReaderFactory.get(entityManager)
.createQuery().forRevisionsOfEntity(PersonDocument.class, false, true)
.add(AuditEntity.relatedId("person").eq("12"))
.addOrder(AuditEntity.revisionNumber().desc());
dann bekomme ich Fehler folgende:
This criterion can only be used on a property that is a relation to another property.
Wenn ich einen nicht zusammengesetzten Primärschlüssel verwenden, dann läuft es ohne Probleme, aber mit ich den Fehler. Hat jemand eine Idee? Die Migration der Daten vom zusammengesetzten Primärschlüssel zu einem zusätzlichen Primärschlüssel für viele bis viele Entitäten ist nicht so einfach.
Ich benutze Hibernate Version 4.3.11
Mit freundlichen Grüßen
Ich fügte eine JIRA zu dieser Diskussion hier hinzu: https://hibernate.atlassian.net/browse/HHH-11748 – Naros
Die Lösung dafür erwies sich als recht einfach. Wir müssen nur in der Lage sein, einen zweiten Durchlauf von Bezeichnern durchzuführen, ähnlich wie wir es für Nicht-Bezeichner-Eigenschaften tun, um Verknüpfungen und Komponenteneigenschaften zu verknüpfen. – Naros