2013-08-11 33 views
6

Một StaleObjectStateException đang được ném vào ứng dụng của tôi thay vì OptimisticLockException (khi tôi đọc tôi nên mong đợi điều này) khi vấn đề đồng thời lạc quan xảy ra trong ứng dụng của tôi. Không cần phải đăng mã, vì đó là vấn đề đồng thời cơ bản nhất - phiên bản sai trong cột dấu thời gian.StaleObjectStateException vs OptimisticLockException

Làm cách nào để nhận được OptimisticLockException, chứ không phải phương pháp khác?

Trả lời

7

StaleObjectStateException được ném khi bạn sử dụng API hibernate thẳng. OptimisticLockException được ném nếu bạn sử dụng kiểu dáng ngủ đông kiểu JPA. Nếu đây lẫn lộn bạn vui lòng đọc: What's the difference between JPA and Hibernate?

Dùng thử khối catch để bắt ngoại lệ:

try { 
    // your hibernate operation here 
} catch (OptimisticLockException e) { 
    // do something (eg: inform user update is conflicting) 
} 

Nó đáng chú ý OptimisticLockException xảy ra do giao dịch khác đã được cập nhật (do đó tạo ra phiên bản mới hơn của) các đối tượng trước khi bạn có cơ hội để làm như vậy. Trong ứng dụng giao diện người dùng, thông thường người dùng có nên ghi đè/loại bỏ/hợp nhất phiên bản của mình đối tượng

+1

Tôi biết cách bắt ngoại lệ :) Vấn đề là một ngoại lệ khác sẽ bị ném ở đây. Khi tôi đọc trong tài liệu và sách, OptimisticLockException nên được ném trong trường hợp đồng thời lạc quan. Tôi nhận được StaleObjectStateException thay thế. Tôi muốn người khác! : D –

+1

StaleObjectStateException được ném khi bạn sử dụng API hibernate thẳng. OptimisticLockException là nếu bạn sử dụng phong cách JPA hibernate. Nếu điều này làm bạn bối rối, vui lòng đọc: http://stackoverflow.com/questions/9881611/whats-the-difference-between-jpa-and-hibernate – gerrytan

1

Theo phân tích của tôi về Hibernate 3.5.2 (bây giờ bit cũ), tôi thấy đôi khi họ ném OptimisticLockException và đôi khi StaleObjectStateException. Các hoạt động hàng loạt thậm chí còn ném StaleStateException, là một siêu lớp của StaleObjectStateException, nhưng không có cá thể thực thể.

Dường như với tôi là một quá trình tái cấu trúc chưa hoàn thành, bạn có thể cần phải nắm bắt cả hai và phản ứng theo cùng một cách.

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