Saat Anda mengkomit objek ke JaVers, versi sebelumnya dimuat dari JaversRepository dan dibandingkan dengan versi saat ini (versi yang baru saja Anda lewati ke metode commit()). Dalam hal ini JaVers menemukan versi sebelumnya menggunakan GlobalId
query jadi TypeName + ID entitas. Itu sebabnya ID tidak boleh nol untuk Entitas.
Ada dua kemungkinan:
- Jika null ID normal di kelas ini (sesuai dengan model domain Anda), Anda harus memetakannya sebagai ValueObject di JaVers.
-
Jika Anda menggunakan Hibernate, ada masalah umum dengan proxy lazy loading. Untuk kueri tertentu, Hibernate tidak mengembalikan objek domain asli Anda tetapi objek proxy dinamis yang pada dasarnya kosong (karenanya null ID). Teknik ini mungkin terlihat pintar tetapi membuat objek Anda menjadi sampah sampai diinisialisasi oleh Hibernate.JaVers menyediakan HibernateUnproxyObjectAccessHook yang melakukan pembersihan:menginisialisasi dan menghapus proxy objek domain Anda.
JaversBuilder.javers().withObjectAccessHook(HibernateUnproxyObjectAccessHook() baru).build()
Kait ini diaktifkan secara default di javers-spring-boot-starter-sql
tapi tidak di javers-spring-boot-starter-mongo
. Jika Anda menggunakan starter Mongo, buat kacang JaVers sendiri, dengan kait diaktifkan, lihat JaversMongoAutoConfiguration
.