Tôi có một bộ sưu tập trong mô hình có chứa một tập hợp các 'phiên bản trước' của đối tượng miền gốc của tôi. Các phiên bản trước đó do đó là 'bất biến' và chúng tôi sẽ không bao giờ muốn cập nhật chúng, và chỉ muốn thêm các phiên bản trước khi chúng phát sinh. Ngoài ra đối tượng miền 'được phiên bản' là khá phức tạp và gây ra truy cập cơ sở dữ liệu nặng để truy xuất.Hibernate - Cách duy trì một mục mới trong Bộ sưu tập mà không tải toàn bộ Bộ sưu tập
Khi tôi có phiên bản mới của một trong các đối tượng này, tôi muốn lưu nó với những người khác mà không tải toàn bộ bộ. Câu hỏi thường gặp nâng cao có một số lời khuyên về điều này:
Tại sao Hibernate luôn khởi tạo bộ sưu tập khi tôi chỉ muốn thêm hoặc xóa phần tử?
Thật không may API bộ sưu tập xác định giá trị trả lại phương thức chỉ có thể được tính bằng cách nhấn cơ sở dữ liệu. Có ba ngoại lệ cho điều này: Hibernate có thể thêm vào một số
<bag>
,<idbag>
hoặc<list>
được khai báo vớiinverse="true"
mà không cần khởi tạo bộ sưu tập; giá trị trả về phải luôn đúng.Nếu bạn muốn tránh lưu lượng truy cập cơ sở dữ liệu bổ sung (ví dụ: trong mã quan trọng hiệu suất), hãy tái cấu trúc mô hình của bạn để chỉ sử dụng các liên kết nhiều người. Điều này gần như luôn luôn có thể. Sau đó, sử dụng truy vấn thay cho quyền truy cập bộ sưu tập.
Tôi mới làm quen với tất cả điều này và không chắc chắn 100% về cách cấu trúc lại mô hình của bạn để chỉ sử dụng các liên kết nhiều người. Bất cứ ai có thể xin vui lòng cho tôi một ví dụ về điểm tôi đến một hướng dẫn để tôi có thể tìm hiểu cách thức này sẽ giải quyết vấn đề của tôi?
Tôi nghĩ những gì tôi thực sự cần là 1) để có thể sử dụng 'bộ lọc hibernate' để chỉ lấy bản sửa đổi đầu khi tải bộ sưu tập (trừ báo cáo kiểm toán); và sau đó 2) nếu đầu này được sửa đổi bởi một thao tác (gây ra hai phần tử trong bộ sưu tập) cho hibernate chỉ cập nhật 'đầu' hiện tại (không phải là đầu nữa) và sau đó chèn phiên bản mới vào cơ sở dữ liệu. Thật không may, nếu chúng ta thực hiện phương pháp này Hibernate dường như nghĩ rằng các phần tử đã được lọc (các phiên bản trước đây) không còn được liên kết với bộ cha mẹ nữa. thiết lập bất biến = 'true' có vẻ không hoạt động. –
Vui vì chúng tôi có thể giúp đỡ. Nếu bạn thích một số câu trả lời, bạn có thể bỏ phiếu cho họ (nhấn mũi tên nhỏ lên trên), để cảm ơn mọi người vì thời gian của họ. Ngoài ra, nếu một câu trả lời là đủ tốt cho bạn, nếu bạn đi đến một cái gì đó khác, bạn có thể đánh dấu một câu trả lời như là một 'chấp nhận'. – KLE