Když odevzdáte objekt do JaVers, jeho předchozí verze se načte z JaversRepository a porovná se s aktuální verzí (ta verze, kterou jste právě předali metodě commit()). V tomto případě JaVers najde předchozí verzi pomocí GlobalId dotaz, takže TypeName + ID entity. To je důvod, proč ID nemůže být pro entity null.
Jsou dvě možnosti:
- Pokud je v této třídě normální nulové ID (podle modelu vaší domény), měli byste jej namapovat jako ValueObject v JaVers.
-
Pokud používáte Hibernate, dochází k běžnému problému s líným načítáním proxy. U určitých dotazů Hibernate nevrací vaše skutečné doménové objekty, ale dynamické proxy objekty, které jsou v podstatě prázdné (proto null ID). Tato technika možná vypadá chytře, ale dělá z vašich objektů odpad, dokud nejsou inicializovány pomocí Hibernate. JaVers poskytuje HibernateUnproxyObjectAccessHook který provádí čištění:inicializaci a zrušení proxy objektů vaší domény.
JaversBuilder.javers().withObjectAccessHook(nové HibernateUnproxyObjectAccessHook()).build()
Tento háček je ve výchozím nastavení povolen v javers-spring-boot-starter-sql
ale ne v javers-spring-boot-starter-mongo
. Pokud používáte Mongo starter, vytvořte si fazoli JaVers sami s povoleným háčkem, viz JaversMongoAutoConfiguration
.