sql >> Databáze >  >> NoSQL >> MongoDB

Javers ENTITY_INSTANCE_WITH_NULL_ID při použití 2 databází

Když odevzdáte objekt do JaVers, jeho předchozí verze se načte z JaversRepository a porovná se s aktuální verzí (ta verze, kterou jste právě předali metodě commit()). V tomto případě JaVers najde předchozí verzi pomocí GlobalId dotaz, takže TypeName + ID entity. To je důvod, proč ID nemůže být pro entity null.

Jsou dvě možnosti:

  1. Pokud je v této třídě normální nulové ID (podle modelu vaší domény), měli byste jej namapovat jako ValueObject v JaVers.
  2. Pokud používáte Hibernate, dochází k běžnému problému s líným načítáním proxy. U určitých dotazů Hibernate nevrací vaše skutečné doménové objekty, ale dynamické proxy objekty, které jsou v podstatě prázdné (proto null ID). Tato technika možná vypadá chytře, ale dělá z vašich objektů odpad, dokud nejsou inicializovány pomocí Hibernate. JaVers poskytuje HibernateUnproxyObjectAccessHook který provádí čištění:inicializaci a zrušení proxy objektů vaší domény.

    JaversBuilder.javers().withObjectAccessHook(nové HibernateUnproxyObjectAccessHook()).build()

Tento háček je ve výchozím nastavení povolen v javers-spring-boot-starter-sql ale ne v javers-spring-boot-starter-mongo . Pokud používáte Mongo starter, vytvořte si fazoli JaVers sami s povoleným háčkem, viz JaversMongoAutoConfiguration .



  1. Proč jsou souřadnice polygonových objektů GeoJSON uloženy v poli pole?

  2. Jak extrahovat časové razítko z mongodb objectid v postgresu

  3. MongoDB – Index se nepoužívá při řazení a omezuje se na dotaz s rozsahem

  4. Jak převést řetězec na BSON?