2012-04-18 39 views
6

Tôi đang cố gắng hiểu tác dụng của việc gọi EntityManager.lock (thực thể, LockModeType.READ). Tài liệu API có vẻ rất khó hiểu đối với tôi.JPA: Khóa đọc hoạt động như thế nào?

Nếu tôi có chủ đề đồng thời và chuỗi cuộc gọi Chủ đề 1 (thực thể, LockModeType.READ), thì Thread 2 vẫn đọc và viết đối tượng?

Điều tôi đã học được cho đến thời điểm này:

Loại khóa ĐỌC trong JPA1 giống với OPTIMISTIC trong JPA2. Nếu khóa như vậy được thiết lập, EntityManager kiểm tra thuộc tính phiên bản trước khi thực hiện giao dịch, nhưng không cập nhật nó. Tôi đã tìm thấy giải thích cho chế độ khóa OPTIMISTIC: Link. Tìm kiếm Ví dụ LockMode OPTIMISTIC (READ). Như fas như tôi hiểu điều này, thiết lập một khóa đọc trong Thread 1 không có hiệu lực trên Chủ đề 2 ... n. Tất cả các chủ đề khác vẫn có thể đọc và viết thực thể. Nhưng khi giao dịch trong Thread 1 commit và một Thread khác đã cập nhật thực thể, giao dịch trong Thread 1 được khôi phục.

Tôi có hiểu điều này đúng không?

Trả lời

4

đọc được curently phản anyway nhưng chỉ dành riêng cho sự hiểu biết của bạn:

Một ĐỌC khóa sẽ đảm bảo rằng trạng thái của đối tượng không thay đổi về cam kết, vì khóa READ cho phép các giao dịch khác để cập nhật hoặc xóa nó sau đó nếu Chủ đề 1 thực hiện một số thay đổi và sau đó cam kết đầu tiên kiểm tra trạng thái (phiên bản) của thực thể nếu nó kiểm tra, nó được cam kết, nếu không được phép,

để hiểu biết cơ bản là chính xác.

cũng có OPTIMISTIC_READ là cách hiện đại sử dụng nó (như có _WRITE).

CẬP NHẬT

Ok này article đã giúp tôi rất nhiều trong việc tìm hiểu hy vọng điều này sẽ giúp.

+0

Tôi vẫn không hiểu. Ai đó có thể tái cơ cấu các câu hay thêm một ví dụ? – stoefln

+0

Tôi đã cập nhật câu trả lời của mình, vui lòng kiểm tra liên kết tôi đã cung cấp – engma

Các vấn đề liên quan