@Version
Chú thích hoạt động như thế nào trong JPA?
Tôi đã tìm thấy nhiều câu trả lời khác nhau có trích dẫn như sau:
JPA sử dụng trường phiên bản trong các thực thể của bạn để phát hiện các sửa đổi đồng thời đối với cùng một bản ghi kho dữ liệu. Khi thời gian chạy JPA phát hiện nỗ lực sửa đổi đồng thời cùng một bản ghi, nó sẽ ném ra một ngoại lệ cho giao dịch đang cố gắng thực hiện cuối cùng.
Nhưng tôi vẫn không chắc nó hoạt động như thế nào.
Cũng như từ các dòng sau:
Bạn nên coi các trường phiên bản là bất biến. Thay đổi giá trị trường có kết quả không xác định.
Có nghĩa là chúng ta nên khai báo trường phiên bản của mình là final
?
UPDATE myentity SET mycolumn = 'new value', version = version + 1 WHERE version = [old.version]
. Nếu ai đó cập nhật bản ghi, bản ghiold.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.