Wanneer u een object aan JaVers vastlegt, wordt de vorige versie geladen vanuit JaversRepository en vergeleken met de huidige versie (die versie die u zojuist hebt doorgegeven aan de methode commit()). In dit geval vindt JaVers de vorige versie met behulp van GlobalId
query dus TypeName + entiteit-ID. Daarom kan ID niet nul zijn voor entiteiten.
Er zijn twee mogelijkheden:
- Als null-ID normaal is in deze klasse (volgens uw domeinmodel), moet u deze toewijzen als ValueObject in JaVers.
-
Als u Hibernate gebruikt, is er een veelvoorkomend probleem met luie laadproxy's. Voor bepaalde zoekopdrachten retourneert Hibernate niet uw echte domeinobjecten, maar dynamische proxy-objecten die in wezen leeg zijn (vandaar een nul-ID). Deze techniek ziet er misschien slim uit, maar maakt uw objecten afval totdat ze worden geïnitialiseerd door Hibernate.JaVers biedt HibernateUnproxyObjectAccessHook die de opschoning doet:initialisatie en de-proxy van uw domeinobjecten.
JaversBuilder.javers().withObjectAccessHook(new HibernateUnproxyObjectAccessHook()).build()
Deze hook is standaard ingeschakeld in javers-spring-boot-starter-sql
maar niet in javers-spring-boot-starter-mongo
. Als je Mongo starter gebruikt, maak dan zelf een JaVers bean, met de hook ingeschakeld, zie JaversMongoAutoConfiguration
.