2016-08-30 2 views
2

Beim Aktualisieren von Hibernate von 3.3.2.GA auf 4.3.11.Final habe ich eine "EntityNotFoundException" bei der Abfrage von Audit-Tabellen.Hibernate Envers: Entität in einer ManyToOne-Beziehung nicht gefunden

Mein Modell:

@Entity 
@Audited 
public class A { 
    [...] 
    @ManyToOne 
    @JoinColumn(name = "B_ID", nullable = false) 
    private EntityB entityB; 
    [...] 
} 

@Entity 
@Audited 
public class B { 
    [...] 
} 

Wenn ich Audit-Tabellen in der Datenbank (SQL Server) überprüfen, ich sehe den Grund meiner Ausnahme.

select * from A_AUD where id = 1 => 1 result with VER_REV = 100 (and B_ID = 10) 
select * from B_AUD where id = 10 => 2 results with VER_REV = 200 and 300 

Wenn ich versuche, mit JPA zu laden:

ist ein träges Laden B_AUD
getAuditReader(anEntityManager).createQuery().forRevisionsOfEntity(A.class false, true).add(AuditEntity.id().eq(1)); 

Hibernate. Aber in der Abfrage überprüft er VER_REV < = 100. Und kein Ergebnis kann gefunden werden.

Ist es ein Problem meiner Daten, die nicht in Hibernate 3 einchecken? Oder das kann im Code gelöst werden?

Ich habe einige Antworten Elemente wie in gefunden, aber ich kann nicht die "gute Praxis" für dieses Problem finden. Das Aktualisieren von VER_REV in der Datenbank kann Auswirkungen auf andere Entitäten haben (mein Modell ist etwas komplex). Und das "Patchen" Envers muss nur die letzte Lösung sein.

Vielen Dank im Voraus für Ihre Antworten.

+0

Können Sie die Konfigurationseinstellungen, mit denen Sie bootstrappen, mit denen sind Hibernate Envers spezifisch? Könnten Sie auch die genaue Zuordnung von der 'EntityB'-Seite für die Sammlung in Ihrem Post einschließen? – Naros

Antwort

0

Ist es ein Problem meiner Daten, die nicht in Hibernate 3 einchecken? Oder das kann im Code gelöst werden?

Dies ist nicht unbedingt ein Codeproblem oder ein Datenproblem.

Das von Ihnen erwähnte Szenario kann leicht auftreten, wenn die Entität A geändert wird, aber diese Änderung keinen Einfluss auf den Status der Entität B hat und die erste Revision nur bewirkt, dass die Entität A einen Revisionsdatensatz gespeichert hat, z. VER_REV = 100.

Später zu einem späteren Zeitpunkt noch zwei weitere Änderungen aufgetreten, dass geänderte Einheit B aber ähnlich wie das erste Szenario, diese Änderungen haben keine Auswirkungen auf Unternehmen A, also warum diese Einheit B Änderungen haben VER_REV = 200 und VER_REV = 300.

Ich habe einen Kommentar hinzugefügt und kann diese Antwort mit spezifischeren Details aktualisieren, sobald ich mehr Verständnis für Ihre Konfiguration & Mappings habe.

Verwandte Themen