Hibernate Documentation cho ví dụ điển hình về điều này. Ngoài ra, blog post này sẽ cung cấp cho bạn một số thông tin chi tiết. Tôi sẽ thêm một số dòng từ đó bên dưới.
Có thể tải lại đối tượng và tất cả các bộ sưu tập của đối tượng bất kỳ lúc nào bằng cách sử dụng phương thức refresh()
. Điều này rất hữu ích khi kích hoạt cơ sở dữ liệu được sử dụng để khởi tạo một số thuộc tính của đối tượng.
sess.save(cat);
sess.flush(); //force the SQL INSERT
sess.refresh(cat); //re-read the state (after the trigger executes)
xem here để biết thêm ví dụ.
Bất cứ khi nào bạn chuyển đối tượng đến save(), update() or saveOrUpdate()
và bất cứ khi nào bạn truy xuất đối tượng bằng cách sử dụng load(), get(), list(), iterate() or scroll()
, đối tượng đó sẽ được thêm vào bộ nhớ cache nội bộ của Phiên.
Khi sau đó flush()
được gọi, trạng thái của đối tượng đó sẽ được đồng bộ hóa với cơ sở dữ liệu. Nếu bạn không muốn đồng bộ hóa này xảy ra, hoặc nếu bạn đang xử lý một số lượng lớn các đối tượng và cần quản lý hiệu quả bộ nhớ, phương pháp evict()
có thể được sử dụng để xóa đối tượng và các bộ sưu tập của nó khỏi bộ nhớ cache cấp một.
ScrollableResult cats = sess.createQuery("from Cat as cat").scroll(); //a huge result set
while (cats.next()) {
Cat cat = (Cat) cats.get(0);
doSomethingWithACat(cat);
sess.evict(cat); // (if gives the compile time error then use it: sess.evict(cat.getClass());
}
Đọc ví dụ hoàn chỉnh từ here.
Đọc về phiên API here.
Tôi đang cố gắng gọi sessionFectory.evict (mèo) nhưng nó cho tôi lỗi biên dịch thời gian - đối số không áp dụng được. –
@KevalTrivedi Xem xét việc đăng câu hỏi mới với tất cả thông tin liên quan như mã mẫu và nhật ký mẫu của bạn. – ManuPK