sql >> Databasteknik >  >> NoSQL >> MongoDB

Javers ENTITY_INSTANCE_WITH_NULL_ID när du använder 2 databaser

När du commit ett objekt till JaVers, laddas dess tidigare version från JaversRepository och jämförs med den nuvarande versionen (den version som du just har skickat till commit()-metoden). I det här fallet hittar JaVers den tidigare versionen med GlobalId fråga så TypName + enhets-ID. Det är därför ID inte kan vara null för Entities.

Det finns två möjligheter:

  1. Om null-ID är normalt i den här klassen (enligt din domänmodell) bör du mappa det som ValueObject i JaVers.
  2. Om du använder Hibernate finns det ett vanligt problem med lat inläsning av proxyservrar. För vissa frågor returnerar Hibernate inte dina riktiga domänobjekt utan dynamiska proxyobjekt som i huvudsak är tomma (därav null-ID). Den här tekniken kanske ser smart ut men gör dina objekt skräp tills de initieras av Hibernate.JaVers ger HibernateUnproxyObjectAccessHook som gör rengöringen:initiering och avproxy av dina domänobjekt.

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

Denna hook är aktiverad som standard i javers-spring-boot-starter-sql men inte i javers-spring-boot-starter-mongo . Om du använder Mongo starter, skapa en JaVers-böna på egen hand, med kroken aktiverad, se JaversMongoAutoConfiguration .



  1. mongodb:hur man uppdaterar arrayelement efter indexnummer

  2. java.lang.NoClassDefFoundError när du använder MongoDB-drivrutinen

  3. Fråga om sista matrisvärde

  4. Redis - vad, varför och hur man använder Redis som en primär databas