Como faço para desencadear onLoad entidade () usando o Hibernate Envers?

votos
0

Estou adicionando Hibernate Envers ao meu projeto Grails 3. Percebi que para um dos meus entidades, que tem um onLoad()evento, o onLoad()evento nunca é invocado para entidades de revisão Envers.

Como posso ter certeza de que este código é sempre invocado, mesmo para revisões históricas desta entidade?

Caso de uso:

Eu estou trabalhando em um serviço RESTful usando visualizações Grails 3 JSON. Uma das minhas classes de domínio tem uma coluna discriminadora, que também deve ser processado na saída JSON assim que o consumidor pode dizer que tipo é. Por esta razão, a entidade de domínio define um onLoad()método que preenche uma propriedade transitória que corresponda ao tipo discriminador:

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

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

Esta multa trabalha para instâncias de domínio normal, mas quando eu olho para uma revisão entidade de Envers' AuditQueryCreator, o queyr auditoria não é invocar o onLoad()método.

Parece que eu poderia loop sobre os resultados e invocar manualmente onLoad(), mas eu estava esperando que houvesse uma maneira melhor de resolver isso.

Desde já, obrigado!

Publicado 13/01/2020 em 23:59
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

você pode tentar mudar o tipo de retorno para "def", como indicado na doc aqui

class Person {
   String name
   Date dateCreated
   Date lastUpdated
   def onLoad() {
      log.debug "Loading ${id}"
   }
}
Respondeu 16/01/2020 em 00:32
fonte usuário

votos
0

Como posso ter certeza de que este código é sempre invocado, mesmo para revisões históricas desta entidade?

Eu não estou bem versado com Grails, mas estes parecem muito com os eventos de ciclo de vida evento típico JPA anotada e estes são métodos prováveis ​​que GORM (muito parecido com um implementador JPA) olhar para e invocar com base no ciclo de vida de uma entidade.

A grande take importante afastado aqui é que os objetos retornados pelo Envers consulta API não são entidades. Esses objetos não são gerenciados pelo provedor de persistência, por isso é importante para fazer claramente que distinção de que as influências um monte de expectativas de comportamento persistência como entidades isoladas, eventos de ciclo de vida da entidade, etc.

Se houver alguns pós-inicializar ou outro ciclo de vida chamadas de retorno que você precisa para fogo quando buscar resultados a partir de um AuditQuery, seu sobre o código do usuário para fazer essas distinções e invocar esses métodos, conforme necessário.

Respondeu 17/01/2020 em 23:32
fonte usuário

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