Độc phiên. Bắt đầu giao dịch khi bạn cần thực hiện một tập hợp các hoạt động (như cập nhật dữ liệu sau hộp thoại OK), cam kết tx ở cuối. Kết nối mặc dù là liên tục mở (vì nó là cùng một phiên), và do đó tất cả các cơ hội cho bộ nhớ đệm có thể được sử dụng bởi cả Hib và RDBMS. Nó cũng có thể là một ý tưởng tốt để thực hiện một phiên minh bạch mở lại trong trường hợp kết nối đã chết - người dùng có xu hướng để các ứng dụng mở trong thời gian dài, và nó sẽ tiếp tục hoạt động hôm thứ hai ngay cả khi máy chủ DB đã được khởi động lại vào cuối tuần.
Cập nhật
Jens Schauder cung cấp một lý do để sử dụng nhiều phiên: một phần (không mong muốn) cập nhật phiên. Vâng, điều đó đi theo cách bạn sử dụng Hibernate.
Giả sử chúng tôi có hai hộp thoại đang mở (như trong ví dụ blog của Jens). Nếu người dùng nhấp vào một hộp phát thanh và chúng tôi sẽ cập nhật ngay lập tức một thực thể Hibernate được kết hợp với hộp radio này, khi người dùng nhấp vào Hủy, chúng tôi đang gặp sự cố - phiên đã được cập nhật.
Cách đúng, như tôi thấy, là cập nhật các biến đối thoại (các đối tượng không có Hibernate). Sau đó, khi người dùng nhấp vào OK, chúng tôi bắt đầu một giao dịch, hợp nhất các đối tượng được cập nhật, cam kết giao dịch. Không có rác nào được lưu vào phiên.
MyHibernateUtils.begin();
Settings settings = DaoSettings.load();
// update setttings here
DaoSettings.save(settings);
MyHibernateUtils.commit();
Nếu chúng tôi thực hiện việc tách biệt mối quan tâm, sau này chúng tôi có thể chuyển sang nhiều phiên với thay đổi đơn giản MyHibernateUtils.begin().
Đối với rò rỉ bộ nhớ có thể, cũng ... Transaction.commit() gọi Session.flush(), AFAIK, cũng xóa bộ nhớ cache. Ngoài ra, người ta có thể kiểm soát thủ công chính sách bộ nhớ đệm bằng cách gọi Session.setCacheMode().
Nguồn
2008-11-06 14:02:45
Điểm tốt, Jens! –