MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Javers ENTITY_INSTANCE_WITH_NULL_ID ao usar 2 bancos de dados


Quando você submete um objeto ao JaVers, sua versão anterior é carregada do JaversRepository e comparada com a versão atual (essa versão você acabou de passar para o método commit()). Neste caso, o JaVers encontra a versão anterior usando GlobalId query so TypeName + ID da entidade. É por isso que a ID não pode ser nula para Entidades.

Existem duas possibilidades:
  1. Se o ID nulo for normal nesta classe (de acordo com seu modelo de domínio), você deve mapeá-lo como ValueObject em JaVers.

  2. Se você estiver usando o Hibernate, há um problema comum com proxies de carregamento lento. Para certas consultas, o Hibernate não retorna seus objetos de domínio reais, mas objetos de proxy dinâmicos que são essencialmente vazios (portanto, ID nulo). Esta técnica pode parecer inteligente, mas torna seus objetos lixo até que eles sejam inicializados pelo Hibernate.JaVers fornece HibernateUnproxyObjectAccessHook que faz a limpeza:inicializando e desfazendo o proxy de seus objetos de domínio.

    JaversBuilder.javers().withObjectAccessHook(new HibernateUnproxyObjectAccessHook()).build()

Este gancho é habilitado por padrão em javers-spring-boot-starter-sql mas não em javers-spring-boot-starter-mongo . Se você estiver usando o Mongo starter, crie um bean JaVers por conta própria, com o hook ativado, consulte JaversMongoAutoConfiguration .