Làm cách nào để tác phẩm chú thích @Version
hoạt động trong JPA?Java - JPA - Chú thích @Version
Tôi tìm thấy câu trả lời khác nhau mà chiết xuất được như sau:
JPA sử dụng một phiên bản lĩnh trong các đơn vị của bạn để phát hiện những thay đổi đồng thời vào hồ sơ kho dữ liệu tương tự. Khi thời gian chạy JPA phát hiện một nỗ lực để đồng thời sửa đổi cùng một bản ghi, nó ném một ngoại lệ cho giao dịch cố gắng để cam kết cuối cùng.
Nhưng tôi vẫn không chắc cách thức hoạt động.
Ngoài ra, kể từ những dòng sau:
Bạn nên cân nhắc các lĩnh vực phiên bản không thay đổi. Thay đổi giá trị trường có kết quả không xác định.
Có phải chúng ta nên khai báo trường phiên bản là final
?
Tất cả nó làm là kiểm tra/cập nhật các phiên bản trong mỗi truy vấn cập nhật: 'CẬP NHẬT myentity SET mycolumn = 'giá trị mới', phiên bản = phiên bản + 1 WHERE version = [old.version]'. Nếu ai đó cập nhật bản ghi, 'old.version' sẽ không còn khớp với bản ghi trong DB và mệnh đề where sẽ ngăn cập nhật xảy ra. 'Các hàng được cập nhật' sẽ là '0', mà JPA có thể phát hiện để kết luận rằng một sửa đổi đồng thời đã xảy ra. –