Когато ангажирате обект към JaVers, неговата предишна версия се зарежда от JaversRepository и се сравнява с текущата версия (тази версия, която току-що сте предали на метода commit()). В този случай JaVers намира предишната версия, използвайки GlobalIdкод> заявка, така че TypeName + ID на обект. Ето защо ID не може да бъде нула за Entities.
Има две възможности:
- Ако null ID е нормален в този клас (според вашия модел на домейн), трябва да го картографирате като ValueObject в JaVers.
-
Ако използвате Hibernate, има често срещан проблем с мързеливото зареждане на проксита. За определени заявки Hibernate не връща реалните ви обекти на домейн, а динамични прокси обекти, които по същество са празни (следователно нулев идентификатор). Тази техника може би изглежда умна, но прави вашите обекти боклук, докато не бъдат инициализирани от Hibernate. JaVers предоставя HibernateUnproxyObjectAccessHook който извършва почистването:инициализиране и премахване на прокси на обектите на вашия домейн.
JaversBuilder.javers().withObjectAccessHook(нов HibernateUnproxyObjectAccessHook()).build()
Тази кука е активирана по подразбиране в javers-spring-boot-starter-sql
но не и в javers-spring-boot-starter-mongo
. Ако използвате Mongo starter, създайте JaVers bean самостоятелно, с активирана кука, вижте JaversMongoAutoConfiguration
.