Når du commiterer et objekt til JaVers, indlæses dets tidligere version fra JaversRepository og sammenlignes med den aktuelle version (den version, du lige har videregivet til commit()-metoden). I dette tilfælde finder JaVers den tidligere version ved hjælp af GlobalId forespørg så TypeName + enheds-id. Det er derfor, ID ikke kan være nul for enheder.
Der er to muligheder:
- Hvis null ID er normalt i denne klasse (i henhold til din domænemodel), skal du kortlægge det som ValueObject i JaVers.
-
Hvis du bruger Hibernate, er der et almindeligt problem med doven indlæsning af proxyer. For visse forespørgsler returnerer Hibernate ikke dine rigtige domæneobjekter, men dynamiske proxyobjekter, som i det væsentlige er tomme (deraf null ID). Denne teknik ser måske smart ud, men gør dine objekter skrald, indtil de initialiseres af Hibernate.JaVers giver HibernateUnproxyObjectAccessHook som udfører rensningen:initialisering og fjernelse af proxy af dine domæneobjekter.
JaversBuilder.javers().withObjectAccessHook(new HibernateUnproxyObjectAccessHook()).build()
Denne hook er aktiveret som standard i javers-spring-boot-starter-sql
men ikke i javers-spring-boot-starter-mongo
. Hvis du bruger Mongo starter, skal du oprette en JaVers-bønne på egen hånd med krogen aktiveret, se JaversMongoAutoConfiguration
.