MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Javers ENTITY_INSTANCE_WITH_NULL_ID quando si utilizzano 2 database

Quando esegui il commit di un oggetto su JaVers, la sua versione precedente viene caricata da JaversRepository e confrontata con la versione corrente (quella versione che hai appena passato al metodo commit()). In questo caso JaVers trova la versione precedente usando GlobalId query so TypeName + ID entità. Ecco perché ID non può essere null per Entities.

Ci sono due possibilità:

  1. Se l'ID nullo è normale in questa classe (in base al tuo modello di dominio), dovresti mapparlo come Oggetto-valore in JaVers.
  2. Se stai usando Hibernate, c'è un problema comune con i proxy di caricamento lento. Per determinate query, Hibernate non restituisce i tuoi oggetti di dominio reali ma oggetti proxy dinamici che sono essenzialmente vuoti (quindi ID nullo). Questa tecnica potrebbe sembrare intelligente ma rende inutili i tuoi oggetti fino a quando non vengono inizializzati da Hibernate.JaVers fornisce HibernateUnproxyObjectAccessHook che fa la pulizia:inizializzazione e annullamento del proxy dei tuoi oggetti di dominio.

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

Questo hook è abilitato per impostazione predefinita in javers-spring-boot-starter-sql ma non in javers-spring-boot-starter-mongo . Se stai usando Mongo starter, crea un bean JaVers da solo, con l'hook abilitato, vedi JaversMongoAutoConfiguration .