Hoe kan ik dit laten entiteit onLoad () met behulp van winterslaap Envers?

stemmen
0

Ik voeg Hibernate Envers aan mijn Grails 3 project. Ik heb gemerkt dat voor één van mijn entiteiten, die een heeft onLoad()evenement, het onLoad()evenement is nooit voor Envers herziening entiteiten ingeroepen.

Hoe kan ik ervoor zorgen dat deze code wordt altijd ingeroepen, zelfs voor historische herzieningen van deze entiteit?

Use case:

Ik ben bezig met een goede service met behulp van uitzicht Grails 3 JSON. One van mijn domein classes heeft een discriminator kolom, die ook moet worden weergegeven in het JSON output, zodat de consument kan zien welk type het is. Daarom domein entiteit definieert een onLoad()werkwijze waarin een voorbijgaande eigenschap overeenkomt met de discriminator soort bevolkt:

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

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

Dit werkt prima voor normaal domein gevallen, maar als ik kijk omhoog een entiteit herziening van Envers' AuditQueryCreator, de audit queyr is niet het aanroepen van de onLoad()methode.

Het lijkt alsof ik kon lus over de resultaten en het handmatig te roepen onLoad(), maar ik hoopte er een betere manier om dit op te lossen was.

Bij voorbaat bedankt!

De vraag is gesteld op 13/01/2020 om 21:59
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

je zou kunnen proberen het veranderen van de soort terugkeer naar "def", zoals vermeld in de doc hier

class Person {
   String name
   Date dateCreated
   Date lastUpdated
   def onLoad() {
      log.debug "Loading ${id}"
   }
}
antwoordde op 15/01/2020 om 22:32
bron van user

stemmen
0

Hoe kan ik ervoor zorgen dat deze code wordt altijd ingeroepen, zelfs voor historische herzieningen van deze entiteit?

Ik ben niet goed vertrouwd met Grails, maar deze lijken erg op de geannoteerde typische PPV event levenscyclus gebeurtenissen en deze zijn waarschijnlijk methoden die GORM (net als een PPV implementor) zoeken en beroep doen op basis van de levenscyclus van een entiteit.

De grote belangrijke take weg hier is dat objecten geretourneerd door de Envers Query API zijn niet entiteiten. Deze objecten worden niet beheerd door de persistentie provider, dus het is belangrijk om duidelijk aan dat onderscheid dat invloeden maken veel persistentiegedrag verwachtingen zoals vrijstaande entiteiten, entiteit levenscyclus evenementen, etc.

Als er een post-initialize of andere levenscyclus callbacks die je nodig hebt om het vuur bij het ophalen van de resultaten van een AuditQuery, zijn op de code van de gebruiker om dat onderscheid te maken en beroep doen op die methoden als nodig is.

antwoordde op 17/01/2020 om 21:32
bron van user

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