När du commit ett objekt till JaVers, laddas dess tidigare version från JaversRepository och jämförs med den nuvarande versionen (den version som du just har skickat till commit()-metoden). I det här fallet hittar JaVers den tidigare versionen med GlobalId fråga så TypName + enhets-ID. Det är därför ID inte kan vara null för Entities.
Det finns två möjligheter:
- Om null-ID är normalt i den här klassen (enligt din domänmodell) bör du mappa det som ValueObject i JaVers.
-
Om du använder Hibernate finns det ett vanligt problem med lat inläsning av proxyservrar. För vissa frågor returnerar Hibernate inte dina riktiga domänobjekt utan dynamiska proxyobjekt som i huvudsak är tomma (därav null-ID). Den här tekniken kanske ser smart ut men gör dina objekt skräp tills de initieras av Hibernate.JaVers ger HibernateUnproxyObjectAccessHook som gör rengöringen:initiering och avproxy av dina domänobjekt.
JaversBuilder.javers().withObjectAccessHook(new HibernateUnproxyObjectAccessHook()).build()
Denna hook är aktiverad som standard i javers-spring-boot-starter-sql
men inte i javers-spring-boot-starter-mongo
. Om du använder Mongo starter, skapa en JaVers-böna på egen hand, med kroken aktiverad, se JaversMongoAutoConfiguration
.