Quando você submete um objeto ao JaVers, sua versão anterior é carregada do JaversRepository e comparada com a versão atual (essa versão você acabou de passar para o método commit()). Neste caso, o JaVers encontra a versão anterior usando
GlobalId query so TypeName + ID da entidade. É por isso que a ID não pode ser nula para Entidades.
Existem duas possibilidades:
- Se o ID nulo for normal nesta classe (de acordo com seu modelo de domínio), você deve mapeá-lo como ValueObject
em JaVers.
-
Se você estiver usando o Hibernate, há um problema comum com proxies de carregamento lento. Para certas consultas, o Hibernate não retorna seus objetos de domínio reais, mas objetos de proxy dinâmicos que são essencialmente vazios (portanto, ID nulo). Esta técnica pode parecer inteligente, mas torna seus objetos lixo até que eles sejam inicializados pelo Hibernate.JaVers fornece HibernateUnproxyObjectAccessHook
que faz a limpeza:inicializando e desfazendo o proxy de seus objetos de domínio.
JaversBuilder.javers().withObjectAccessHook(new HibernateUnproxyObjectAccessHook()).build()
Este gancho é habilitado por padrão em javers-spring-boot-starter-sql
mas não em javers-spring-boot-starter-mongo
. Se você estiver usando o Mongo starter, crie um bean JaVers por conta própria, com o hook ativado, consulte JaversMongoAutoConfiguration
.