Kiedy zatwierdzasz obiekt do JaVers, jego poprzednia wersja jest ładowana z JaversRepository i porównywana z bieżącą wersją (ta wersja, którą właśnie przekazałeś do metody commit()). W tym przypadku JaVers znajduje poprzednią wersję przy użyciu GlobalId zapytanie tak TypeName + identyfikator jednostki. Dlatego identyfikator nie może być pusty dla jednostek.
Istnieją dwie możliwości:
- Jeśli null ID jest normalne w tej klasie (zgodnie z modelem Twojej domeny), powinieneś zmapować go jako WartośćObject w JaVach.
-
Jeśli korzystasz z Hibernate, często występuje problem z leniwym ładowaniem serwerów proxy. W przypadku niektórych zapytań Hibernate nie zwraca prawdziwych obiektów domeny, ale dynamiczne obiekty proxy, które są zasadniczo puste (stąd null ID). Ta technika może wyglądać na sprytną, ale sprawia, że obiekty są śmieciami, dopóki nie zostaną zainicjowane przez Hibernate. JaVers zapewnia HibernateUnproxyObjectAccessHook która zajmuje się czyszczeniem:inicjowaniem i usuwaniem proxy obiektów domeny.
JaversBuilder.javers().withObjectAccessHook(nowy HibernateUnproxyObjectAccessHook()).build()
Ten zaczep jest domyślnie włączony w javers-spring-boot-starter-sql
ale nie w javers-spring-boot-starter-mongo
. Jeśli używasz startera Mongo, samodzielnie utwórz fasolkę JaVers z włączonym hakiem, zobacz JaversMongoAutoConfiguration
.