Hvordan kan jeg utløse enhet onLoad () Bruke dvale Envers?

stemmer
0

Jeg legger Hibernate Envers til min Grails tre prosjekt. Jeg la merke til at for en av mine enheter, som har et onLoad()hendelsen, onLoad()er hendelsen aldri påberopt for Envers revisjonsenheter.

Hvordan kan jeg sørge for at denne koden er alltid påberopt, selv for historiske revisjoner av denne enheten?

Use case:

Jeg jobber med en avslappet tjenesten ved hjelp av Grails 3 JSON utsikt. En av mine domene klasser har en diskriminator kolonne, som også må gjengitt i JSON-utgang slik at forbrukeren kan fortelle hvilken type det er. Av denne grunn definerer domenet foretaket en onLoad()metode som fyller et forbigående eiendom matcher discriminator Type:

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

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

Dette fungerer greit for normale domene tilfeller, men når jeg ser opp en enhet revisjon fra Envers' AuditQueryCreator, er revisjonen queyr ikke påberope seg onLoad()metoden.

Det virker som jeg kunne sløyfe over resultatene og påberope manuelt onLoad(), men jeg hadde håpet det var en bedre måte å fikse dette.

Takk på forhånd!

Publisert på 13/01/2020 klokken 23:59
kilden bruker
På andre språk...                            


2 svar

stemmer
0

du kan prøve å endre returtypen til "def", som nevnt i dokumentet her

class Person {
   String name
   Date dateCreated
   Date lastUpdated
   def onLoad() {
      log.debug "Loading ${id}"
   }
}
Svarte 16/01/2020 kl. 00:32
kilden bruker

stemmer
0

Hvordan kan jeg sørge for at denne koden er alltid påberopt, selv for historiske revisjoner av denne enheten?

Jeg er ikke godt bevandret med Grails men disse ser veldig mye som vanlig JPA hendelsen livssyklus kommenterte hendelsene og disse er sannsynlig metoder som GORM (mye som en JPA implementor) se etter og påkalle basert på livssyklusen til en enhet.

Den store viktige take away her er at objekter som returneres av Envers Query API er ikke enheter. Disse objektene er ikke styrt av utholdenhet leverandør, så det er viktig å tydelig gjøre det skillet som som påvirker mye utholdenhet atferd forventninger som frittstående enheter, enhetslivssyklusarrangementer etc.

Hvis det er noen etterinitialisere eller annen livssyklus callbacks at du må brann ved henting av resultater fra en AuditQuerysin på brukerens kode for å gjøre disse skillene og påkalle disse metodene som trengs.

Svarte 17/01/2020 kl. 23:32
kilden bruker

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