5

Tôi nhận được stack trace sau:HibernateOptimisticLockingFailureException đánh dấu kết nối là 'đã đóng'?

org.springframework.orm.hibernate3.HibernateOptimisticLockingFailureException: Object of class [com.btfin.wrapcore.request.MFRequest] with identifier [2850448]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.btfin.wrapcore.request.MFRequest#2850448] 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:672) 
    at org.springframework.orm.hibernate3.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.java:793) 

Đó là do một khóa ngoại lệ lạc quan. Tôi có thể giải quyết nguyên nhân gốc rễ của việc này.

Câu hỏi của tôi là - trong trường hợp này - xử lý ngoại lệ đặt kết nối cơ sở dữ liệu thành 'đã đóng'. (Mà gây ra vấn đề với hồ bơi kết nối của tôi).

Mẫu để xử lý ngoại lệ cơ sở dữ liệu như HibernateOptimisticLockingFailureException bong bóng lên qua mùa xuân và ngủ đông và trả về kết nối đã đóng là gì?

Bạn có biết phần trong mã Spring/Hibernate đặt kết nối để đóng không?

Trả lời

4

Hibernate Docs nêu rõ rằng nếu bất kỳ trường hợp ngoại lệ nào xảy ra trong khi làm việc với Phiên, thì không thể sử dụng lại phiên sau đó. Hơn nữa, mỗi phiên có thể bao gồm một số giao dịch và sau mỗi giao dịch cam kết - điều tương tự cũng xảy ra, kết nối được đóng lại.

Nhưng khi sử dụng một hồ bơi kết nối, kết nối không theo nghĩa đen đóng cửa, khi phương pháp chặt chẽ() được gọi, các connection is returned to the pool without physical closing:

khi một ứng dụng đóng kết nối của nó, là vật lý kết nối cơ bản được tái chế thay vì hơn là bị đóng cửa.

Vì vậy, nếu bạn gặp sự cố với kết nối bị đóng thực tế, tôi muốn chú ý nhiều hơn đến hồ bơi, không phải Hibernate hoặc Spring - họ không thể làm nhiều hơn là gọi close(). được mô tả trước đó.

+0

Tuyệt vời - bạn có thể thêm liên kết vào tài liệu không? – hawkeye

+0

Xong, nếu không đủ, hãy nói cho tôi một lần nữa :) –

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