オブジェクトをJaVersにコミットすると、その前のバージョンがJaversRepositoryから読み込まれ、現在のバージョン(commit()メソッドに渡したばかりのバージョン)と比較されます。この場合、JaVersはGlobalIdを使用して前のバージョンを検索します。コード> TypeName +エンティティIDを照会します。そのため、エンティティのIDをnullにすることはできません。
2つの可能性があります:
- このクラスでnullIDが正常である場合(ドメインモデルによる)、 ValueObject JaVersで。
-
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を作成します。