2011-01-03 23 views
7

mọi người. Tôi gặp sự cố khi thay thế các hàng hiện có trong bảng bằng các hàng mới. Tôi sử dụng JPA và PostgreSQL DB. Tôi đang cố gắng xóa tất cả các hàng hiện có và sau đó tạo hàng mới nhưng nhận ngoại lệ: org.postgresql.util.PSQLException: ERROR: giá trị khóa trùng lặp vi phạm ràng buộc duy nhất "user_destination_pk". Tất cả những hành động này nằm trong giao dịch JTA đơn lẻ. Dường như JPA không xóa các hàng trước khi chèn, nhưng tôi không nhận được ngoại lệ xóa ... Bất kỳ trợ giúp nào được đánh giá cao.Thay thế các hàng hiện có bằng các hàng mới gây ra ngoại lệ khóa trùng lặp

Trả lời

10

Sử dụng phương pháp Hibernate Session.flush() để xóa (thực thi SQL) các xóa trước khi lưu/thêm các thực thể mới.

+0

Cảm ơn bạn, tôi nghĩ về flush(), nhưng tôi đoán Nó kết thúc giao dịch DB. Tôi có đúng không? Tôi không muốn xóa, không chắc chắn rằng hàng mới là tốt. – damluar

+0

gọi flush() không hoàn thành giao dịch (mặc dù cam kết giao dịch thực hiện ngầm hoàn toàn()), nó chỉ làm cho Hibernate thực hiện SQL để đưa db vào cùng trạng thái như phiên. – araqnid

+0

cảm ơn bạn, bây giờ rõ ràng là – damluar

0

Bạn có thể tạo ràng buộc duy nhất là deferrable initially deferred

+0

Tôi cũng nghĩ điều đó lúc đầu nhưng tôi không nghĩ nó sẽ giúp ích gì ở đây. Từ các mô tả có vẻ như nó thực sự JPA không gửi các xóa trước khi gửi các chèn. Tình huống duy nhất mà điều này sẽ giúp ích là khi JPA gửi các lần xóa ** sau khi ** gửi các khoản chèn. –

+0

@a_horse_with_no_name Điều đó không quan trọng trong cùng một giao dịch JTA mặc dù. –

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