Về cơ bản, tôi có một số đối tượng trong cấu hình này (mô hình dữ liệu thực phức tạp hơn một chút):
- A có mối quan hệ nhiều-nhiều với B. (B có
inverse="true"
) - B có mối quan hệ nhiều-một với C. (Tôi đã
cascade
đặt là"save-update"
) - C là một loại bảng loại / loại.
Ngoài ra, tôi có lẽ nên đề cập rằng các khóa chính được tạo bởi cơ sở dữ liệu khi lưu.
Với dữ liệu của mình, đôi khi tôi gặp sự cố trong đó A có một tập hợp các đối tượng B khác nhau và các đối tượng B này tham chiếu đến cùng một đối tượng C.
Khi tôi gọi session.saveOrUpdate(myAObject)
, tôi nhận được một lỗi ngủ đông nói: "a different object with the same identifier value was already associated with the session: C"
. Tôi biết rằng hibernate không thể chèn / cập nhật / xóa cùng một đối tượng hai lần trong cùng một phiên, nhưng có một số cách giải quyết vấn đề này? Tình huống này có vẻ không phải là hiếm.
Trong quá trình nghiên cứu vấn đề này, tôi đã thấy mọi người đề xuất sử dụng session.merge()
, nhưng khi tôi làm điều đó, bất kỳ đối tượng "xung đột" nào sẽ được chèn vào cơ sở dữ liệu dưới dạng các đối tượng trống với tất cả các giá trị được đặt thành null. Rõ ràng đó không phải là điều chúng tôi muốn.
[Chỉnh sửa] Một điều khác mà tôi quên đề cập là (vì lý do kiến trúc ngoài tầm kiểm soát của tôi), mỗi lần đọc hoặc ghi cần được thực hiện trong một phiên riêng biệt.