MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Javers ENTITY_INSTANCE_WITH_NULL_ID bei Verwendung von 2 Datenbanken

Wenn Sie ein Objekt an JaVers übergeben, wird seine vorherige Version aus dem JaversRepository geladen und mit der aktuellen Version verglichen (diese Version, die Sie gerade an die Methode commit() übergeben haben). In diesem Fall findet JaVers die vorherige Version mithilfe von GlobalId Abfrage also TypName + Entitäts-ID. Deshalb darf die ID für Entitäten nicht null sein.

Es gibt zwei Möglichkeiten:

  1. Wenn eine Null-ID in dieser Klasse normal ist (gemäß Ihrem Domänenmodell), sollten Sie sie als ValueObject in JaVers.
  2. Wenn Sie Hibernate verwenden, gibt es häufig Probleme mit Lazy Loading Proxys. Bei bestimmten Abfragen gibt Hibernate nicht Ihre echten Domänenobjekte zurück, sondern dynamische Proxy-Objekte, die im Wesentlichen leer sind (daher eine Null-ID). Diese Technik sieht vielleicht schlau aus, macht Ihre Objekte aber zu Müll, bis sie von Hibernate initialisiert werden. hook">HibernateUnproxyObjectAccessHook die die Reinigung durchführt:Initialisierung und De-Proxying Ihrer Domain-Objekte.

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

Dieser Hook ist standardmäßig in javers-spring-boot-starter-sql aktiviert aber nicht in javers-spring-boot-starter-mongo . Wenn Sie Mongo Starter verwenden, erstellen Sie selbst eine JaVers-Bean mit aktiviertem Hook, siehe JaversMongoAutoConfiguration .