Phiên được mở mỗi khi sf.getCurrentSession()
được gọi lần đầu tiên. Điều này tạo ra một phiên mới hoàn toàn nếu một phiên không tồn tại hoặc sử dụng phiên hiện tại nếu phiên bản đã tồn tại.
Trong Tomcat, việc này liên kết phiên với chuỗi được tạo bằng đối tượng ThreadLocal
bên dưới. Nhưng kể từ khi Tomcat sử dụng thread pooling hoàn toàn có thể là một yêu cầu có thể nhận được một thread với một phiên đã được liên kết với nó, do đó giới thiệu khả năng thậm chí không tạo ra một phiên mới. Một điều nữa là Phiên mà bạn đã nhận được với sf.getCurrentSession()
bị xóa và đóng tự động.
Mặt khác, phương pháp sf.openSession()
tạo phiên mới nhưng không cố gắng liên kết phiên đó với một chuỗi. Nhưng hãy nhớ rằng sf.openSession()
giới thiệu một lỗi khác ở chỗ nó mong đợi người dùng xử lý việc đóng và xóa các phiên, thay vì để Hibernate tự động làm điều đó cho chúng ta.
sf.getCurrentSession()
thường là đủ. sf.openSession()
cung cấp và tạo điều kiện cho một cấp quản lý lớn hơn về nơi phiên được lưu trữ và quản lý. Đó chắc chắn là một lựa chọn nâng cao.
Nguồn
2012-04-09 12:23:24
Điều đó có nghĩa rằng nếu tôi đang sử dụng sf.getCurrentSession cho đa luồng bên trong tomcat - nó sẽ sử dụng cùng một phiên? Là nó ổn? – Dejell