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à:
- Se l'ID nullo è normale in questa classe (in base al tuo modello di dominio), dovresti mapparlo come Oggetto-valore in JaVers.
-
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
.