Comment puis-je déclencher l'entité onLoad () à l'aide mise en veille prolongée Envers?

voix
0

J'ajoute Hibernate Envers à mon projet Grails 3. J'ai remarqué que pour un de mes entités, qui a un onLoad()événement, l' onLoad()événement est jamais appelé pour les entités de révision Envers.

Comment puis-je assurer que ce code est toujours invoqué, même pour les révisions historiques de cette entité?

Cas d'utilisation:

Je travaille sur un service RESTful utilisant des vues Grails 3 JSON. L' une de mes classes de domaine a une colonne discriminante, qui doit également être rendu dans la sortie JSON afin que le consommateur peut dire de quel type il est. Pour cette raison, l'entité de domaine définit une onLoad()méthode qui remplit une propriété transitoire correspondant au type de discriminateur:

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

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

Cela fonctionne très bien pour les instances de domaine normal, mais quand je regarde une révision de l' entité de Envers' AuditQueryCreator, le queyr d'audit n'est pas Invoquer le onLoad()méthode.

Il semble que je pourrais boucler sur les résultats et appeler manuellement onLoad(), mais j'espérais qu'il y avait une meilleure façon de résoudre ce problème.

Merci d'avance!

Créé 13/01/2020 à 23:59
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

vous pouvez essayer de changer le type de retour à la « définition », comme indiqué dans le document ici

class Person {
   String name
   Date dateCreated
   Date lastUpdated
   def onLoad() {
      log.debug "Loading ${id}"
   }
}
Créé 16/01/2020 à 00:32
source utilisateur

voix
0

Comment puis-je assurer que ce code est toujours invoqué, même pour les révisions historiques de cette entité?

Je ne suis pas bien familiarisés avec Grails mais ceux-ci ressemblent beaucoup à des événements du cycle de vie des événements typiques de JPA annotés et ce sont des méthodes susceptibles que Gorm (comme une Assemblée parlementaire paritaire implementor) regard et Invoke en fonction du cycle de vie d'une entité.

Le big importante est loin ici que les objets renvoyés par l'API de requête Envers ne sont pas des entités. Ces objets ne sont pas gérés par le fournisseur de persistance, il est donc important de faire clairement la distinction qui influence beaucoup d'attentes en matière de comportement de persistance tels que des entités individuelles, les événements du cycle de vie de l' entité, etc.

S'il y a quelques callbacks post-initialize ou tout autre cycle de vie que vous avez besoin d' un incendie lors de la récupération des résultats d'un AuditQuery, son sur le code de l'utilisateur de faire ces distinctions et appeler ces méthodes au besoin.

Créé 17/01/2020 à 23:32
source utilisateur

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