Wie auslösen ich Einheit onLoad () mit Hibernate Envers?

stimmen
0

Ich füge Hibernate Envers meinem Grails 3 Projekt. Ich bemerkte , dass für eine meiner Einheiten, die eine hat onLoad()Ereignis, das onLoad()wird Ereignis nie für Envers Revisionsgesellschaften aufgerufen.

Wie kann ich sicherstellen, dass dieser Code immer aufgerufen, auch für historische Revisionen dieser Einheit?

Anwendungsfall:

Ich arbeite an einem RESTful Service mit Grails 3 JSON Ansichten. Einer meiner Domain - Klassen hat einen Diskriminator Spalte, die auch in der JSON Ausgabe gerendert werden müssen , so kann der Verbraucher sagen , welche Art es ist. Aus diesem Grund definiert die Domäne Entität ein onLoad()Verfahren , das eine transiente Eigenschaft Anpassen des Diskriminators Typ auffüllt:

class MyChildDomainClass extends MyBaseDomainClass {
    void onLoad() {
        valueType = ValueType.STRING
    }

    static mapping = {
        discriminator value: ValueType.STRING
    }
}

Dies funktioniert gut für die normalen Domain - Instanzen, aber wenn ich eine Entität Revision von Envers nachschlagen AuditQueryCreator, wird die Prüfung queyr nicht den Aufruf onLoad()Methode.

Es scheint , wie ich konnte Schleife über die Ergebnisse und manuell aufrufen onLoad(), aber ich hatte gehofft , dass es einen besseren Weg , dies zu beheben war.

Danke im Voraus!

Veröffentlicht am 13/01/2020 um 23:59
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Sie könnten versuchen , den Rückgabetyp „def“ zu ändern, wie in der doc angegeben hier

class Person {
   String name
   Date dateCreated
   Date lastUpdated
   def onLoad() {
      log.debug "Loading ${id}"
   }
}
Beantwortet am 16/01/2020 um 00:32
quelle vom benutzer

stimmen
0

Wie kann ich sicherstellen, dass dieser Code immer aufgerufen, auch für historische Revisionen dieser Einheit?

Ich bin nicht gut mit Grails, aber diese sehen sehr ähnlich wie die typische JPA Ereignis Lifecycle kommentierte Ereignisse versiert und diese sind wahrscheinlich Methoden dass GORM (ähnlich wie bei einem PPV Implementierer) sucht und invoke auf der Grundlage des Lebenszyklus eines Unternehmens.

Die große Bedeutung nimmt hier weg ist , dass durch die Envers Abfrage API zurückgegebenen Objekte sind nicht Einheiten. Diese Aufgaben werden nicht von der Persistenz - Provider verwaltet, so dass ihr wichtig, klar , dass die Unterscheidung zu machen , wie die Einflüsse viel Persistenzverhalten Erwartungen wie frei stehende Einheiten, Einheit Lifecycle - Veranstaltungen, etc.

Wenn es einig post-initialize oder anderen Lebenszyklus - Callbacks ist , dass Sie Feuer müssen , wenn die Ergebnisse von einem Abrufen AuditQuery, seine auf den Code des Benutzers , diese Unterscheidungen und invoke diese Methoden zu machen , wie gebraucht.

Beantwortet am 17/01/2020 um 23:32
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more