sql >> データベース >  >> NoSQL >> MongoDB

2つのデータベースを使用する場合のJaversENTITY_INSTANCE_WITH_NULL_ID

    オブジェクトをJaVersにコミットすると、その前のバージョンがJaversRepositoryから読み込まれ、現在のバージョン(commit()メソッドに渡したばかりのバージョン)と比較されます。この場合、JaVersはGlobalId TypeName +エンティティIDを照会します。そのため、エンティティのIDをnullにすることはできません。

    2つの可能性があります:

    1. このクラスでnullIDが正常である場合(ドメインモデルによる)、 ValueObject JaVersで。
    2. Hibernateを使用している場合、遅延読み込みプロキシに一般的な問題があります。特定のクエリでは、Hibernateは実際のドメインオブジェクトを返しませんが、本質的に空の動的プロキシオブジェクトを返します(したがって、null ID)。この手法はスマートに見えるかもしれませんが、Hibernateによって初期化されるまでオブジェクトをガベージにします。JaVersは HibernateUnproxyObjectAccessHook これにより、ドメインオブジェクトの初期化とプロキシ解除が行われます。

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

    このフックは、 javers-spring-boot-starter-sqlでデフォルトで有効になっています ただし、 javers-spring-boot-starter-mongoにはありません 。 Mongoスターターを使用している場合は、フックを有効にして、独自にJaVersBeanを作成します。 JaversMongoAutoConfiguration 。



    1. Mongodb-nullフィールドを再帰的に削除しますか?

    2. 以前のオブジェクトを削除せずに新しいオブジェクトを挿入する方法

    3. Mongoid-個別のクエリの制限

    4. MongoDB:ネストされた配列をクエリする