sql >> Base de Datos >  >> NoSQL >> MongoDB

Javers ENTITY_INSTANCE_WITH_NULL_ID cuando usa 2 bases de datos

Cuando envía un objeto a JaVers, su versión anterior se carga desde JaversRepository y se compara con la versión actual (esa versión que acaba de pasar al método commit()). En este caso, JaVers encuentra la versión anterior usando GlobalId consulta así TypeName + ID de entidad. Es por eso que la ID no puede ser nula para Entidades.

Hay dos posibilidades:

  1. Si la identificación nula es normal en esta clase (de acuerdo con su modelo de dominio), debe mapearla como ValorObjeto en JaVers.
  2. Si está utilizando Hibernate, existe un problema común con los proxies de carga diferida. Para ciertas consultas, Hibernate no devuelve sus objetos de dominio reales sino objetos proxy dinámicos que están esencialmente vacíos (por lo tanto, ID nulo). Esta técnica puede parecer inteligente, pero convierte sus objetos en basura hasta que Hibernate los inicializa. JaVers proporciona HibernateUnproxyObjectAccessHook que realiza la limpieza:inicialización y eliminación de proxy de los objetos de su dominio.

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

Este enlace está habilitado de forma predeterminada en javers-spring-boot-starter-sql pero no en javers-spring-boot-starter-mongo . Si está utilizando el iniciador Mongo, cree un bean JaVers por su cuenta, con el enlace habilitado, consulte JaversMongoAutoConfiguration .