MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Javers ENTITY_INSTANCE_WITH_NULL_ID lors de l'utilisation de 2 bases de données

Lorsque vous validez un objet dans JaVers, sa version précédente est chargée à partir de JaversRepository et comparée à la version actuelle (cette version que vous venez de transmettre à la méthode commit()). Dans ce cas, JaVers trouve la version précédente à l'aide de GlobalId requête donc TypeName + ID d'entité. C'est pourquoi l'ID ne peut pas être nul pour les entités.

Il y a deux possibilités :

  1. Si un ID nul est normal dans cette classe (selon votre modèle de domaine), vous devez le mapper en tant que ValueObject dans JaVers.
  2. Si vous utilisez Hibernate, il y a un problème commun avec les proxies de chargement paresseux. Pour certaines requêtes, Hibernate ne renvoie pas vos objets de domaine réels mais des objets proxy dynamiques qui sont essentiellement vides (d'où un ID nul). Cette technique peut sembler intelligente mais rend vos objets inutiles jusqu'à ce qu'ils soient initialisés par Hibernate.JaVers fournit HibernateUnproxyObjectAccessHook qui fait le nettoyage :initialisation et suppression du proxy de vos objets de domaine.

    JaversBuilder.javers().withObjectAccessHook(new HibernateUnproxyObjectAccessHook()).build()

Ce hook est activé par défaut dans javers-spring-boot-starter-sql mais pas dans javers-spring-boot-starter-mongo . Si vous utilisez Mongo starter, créez vous-même un bean JaVers, avec le hook activé, voir JaversMongoAutoConfiguration .