Khi bạn cam kết một đối tượng cho JaVers, phiên bản trước của nó sẽ được tải từ JaversRepository và được so sánh với phiên bản hiện tại (phiên bản mà bạn vừa chuyển cho phương thức commit ()). Trong trường hợp này, JaVers tìm phiên bản trước đó bằng cách sử dụng GlobalId truy vấn để TypeName + ID thực thể. Đó là lý do tại sao ID không thể trống cho Thực thể.
Có hai khả năng:
- Nếu ID rỗng là bình thường trong lớp này (theo mô hình miền của bạn), bạn nên ánh xạ nó dưới dạng ValueObject trong JaVers.
-
Nếu bạn đang sử dụng Hibernate, thường có vấn đề với các proxy tải chậm. Đối với một số truy vấn nhất định, Hibernate không trả về các đối tượng miền thực của bạn mà là các đối tượng proxy động về cơ bản trống (do đó có ID rỗng). Kỹ thuật này có thể trông thông minh nhưng làm cho các đối tượng của bạn trở nên rác cho đến khi chúng được khởi tạo bởi Hibernate.JaVers cung cấp HibernateUnproxyObjectAccessHook thực hiện công việc dọn dẹp:khởi tạo và giải nén các đối tượng miền của bạn.
JaversBuilder.javers (). WithObjectAccessHook (HibernateUnproxyObjectAccessHook mới ()). Build ()
Móc này được bật theo mặc định trong javers-spring-boot-starter-sql
nhưng không có trong javers-spring-boot-starter-mongo
. Nếu bạn đang sử dụng Mongo starter, hãy tự tạo bean JaVers, với hook được bật, hãy xem JaversMongoAutoConfiguration
.