sql >> Database >  >> NoSQL >> MongoDB

Javers ENTITY_INSTANCE_WITH_NULL_ID bij gebruik van 2 databases

Wanneer u een object aan JaVers vastlegt, wordt de vorige versie geladen vanuit JaversRepository en vergeleken met de huidige versie (die versie die u zojuist hebt doorgegeven aan de methode commit()). In dit geval vindt JaVers de vorige versie met behulp van GlobalId query dus TypeName + entiteit-ID. Daarom kan ID niet nul zijn voor entiteiten.

Er zijn twee mogelijkheden:

  1. Als null-ID normaal is in deze klasse (volgens uw domeinmodel), moet u deze toewijzen als ValueObject in JaVers.
  2. Als u Hibernate gebruikt, is er een veelvoorkomend probleem met luie laadproxy's. Voor bepaalde zoekopdrachten retourneert Hibernate niet uw echte domeinobjecten, maar dynamische proxy-objecten die in wezen leeg zijn (vandaar een nul-ID). Deze techniek ziet er misschien slim uit, maar maakt uw objecten afval totdat ze worden geïnitialiseerd door Hibernate.JaVers biedt HibernateUnproxyObjectAccessHook die de opschoning doet:initialisatie en de-proxy van uw domeinobjecten.

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

Deze hook is standaard ingeschakeld in javers-spring-boot-starter-sql maar niet in javers-spring-boot-starter-mongo . Als je Mongo starter gebruikt, maak dan zelf een JaVers bean, met de hook ingeschakeld, zie JaversMongoAutoConfiguration .



  1. Verbindingen beheren

  2. MongoDB:Hoe willekeurige elementen retourneren zonder Linq? (MongoDB, C#)

  3. Beperk het gebruik van MongoDB RAM

  4. MongoDB krijgt individuele telling van subdocumenten met vergelijkingsbewerkingen