Cum pot declanșa onLoad entitate () folosind Hibernate Envers?

voturi
0

Eu adaug Hibernate Envers la proiectul meu Grails 3. Am observat că , pentru una dintre entitățile mele, care are un onLoad()caz, onLoad()evenimentul nu este niciodată invocată pentru entitățile de revizuire Envers.

Cum pot fi sigur că acest cod este întotdeauna invocat, chiar și pentru revizuirile istorice ale acestei entități?

Utilizare caz:

Sunt de lucru pe un serviciu REST folosind vederi Grails 3 JSON. Una dintre clase domeniul meu are o coloană discriminator, care trebuie să fie , de asemenea , redat în producția JSON astfel încât consumatorul poate spune ce tip este. Din acest motiv, entitatea domeniu definește o onLoad()metodă care populează o proprietate tranzitorie de potrivire de tip discriminator de :

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

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

Aceasta funcționează bine pentru cazuri de domenii normale, dar când mă uit în sus o revizuire entitate din Envers' AuditQueryCreator, The queyr audit nu invocă onLoad()metoda.

Se pare ca am putut bucla asupra rezultatelor și a invoca manual onLoad(), dar am fost în speranța că a fost o modalitate mai bună de a rezolva această problemă .

Mulțumesc anticipat!

Întrebat 13/01/2020 la 23:59
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

ați putea încerca să schimbați tipul de întoarcere la „def“, după cum se menționează în doc aici

class Person {
   String name
   Date dateCreated
   Date lastUpdated
   def onLoad() {
      log.debug "Loading ${id}"
   }
}
Publicat 16/01/2020 la 00:32
sursa de către utilizator

voturi
0

Cum pot fi sigur că acest cod este întotdeauna invocat, chiar și pentru revizuirile istorice ale acestei entități?

Nu sunt bine versat cu Grails dar acestea arata foarte mult ca evenimentele tipice JPA eveniment ciclului de viață al adnotate și acestea sunt metode probabil ca GORM (mai mult ca un implementor JPA) look și invocați bazat pe ciclul de viață al unei entități.

Marea decolare importantă departe de aici este faptul că obiectele returnate de interogare Envers API nu sunt entități. Aceste obiecte nu sunt gestionate de către furnizorul de persistență, astfel încât este important să facă în mod clar că această distincție care influențează o mulțime de așteptări comportamentale , cum ar fi persistența entități detașate, entitate evenimente ciclului de viață, etc.

Dacă există unele post- inițializarea sau alt ciclu de viață callback pe care trebuie să declanșați atunci când preia rezultatele dintr - o AuditQuery, privind codul utilizatorului de a face aceste distincții și invocați aceste metode după cum este necesar.

Publicat 17/01/2020 la 23:32
sursa de către utilizator

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