Vì đây là một câu hỏi rất phổ biến, câu trả lời này dựa trên một bài báo tôi đã viết trên blog của mình.
Trạng thái đã tải thực thể
Khi bạn đang tìm nạp một thực thể, Hibernate sẽ cố gắng tải nó từ bộ đệm ẩn cấp hai hoặc cơ sở dữ liệu.
Nếu thực thể không được lưu trữ trong bộ đệm ẩn cấp thứ hai, thì một truy vấn sẽ được thực thi và JDBC ResultSet
được chuyển đổi thành một thực Object[]
thể có chứa các giá trị thuộc tính thực thể thời gian tải.
Bộ nhớ cache cấp thứ hai lưu trữ điều này Object[]
khi lưu vào bộ nhớ đệm một thực thể. Vì vậy, khi tải một thực thể từ DB hoặc bộ đệm ẩn cấp hai, bạn sẽ nhận được Object[]
mảng giá trị thuộc tính thực thể.
Quá trình chuyển đổi Object[]
trạng thái được tải thành một đối tượng thực thể Java được gọi là quá trình hydrat hóa và nó trông như sau:
final Object[] values = persister.hydrate(
rs, id, object,
rootPersister, cols, eagerPropertyFetch, session
);
Trạng thái đã tải được lưu trong Ngữ cảnh bền bỉ hiện đang chạy dưới dạng đối tượng EntityEntry và nó sẽ được sử dụng sau này cho cơ chế kiểm tra bẩn mặc định , so sánh dữ liệu thực thể hiện tại với ảnh chụp nhanh thời gian tải.
Trạng thái được tải cũng được sử dụng làm giá trị mục nhập bộ đệm cho bộ đệm thực thể cấp thứ hai.
Các hoạt động nghịch đảo của biến đổi thực thể để một Object[]
được sử dụng khi ràng buộc giá trị tham số SQL cho INSERT
, UPDATE
hoặc DELETE
báo cáo được gọi là mất nước .