openSession :- When you call SessionFactory.openSession, it always create new Session object afresh and give it to you.
Bạn cần xóa và đóng các đối tượng phiên một cách rõ ràng. Vì các đối tượng phiên không phải là chủ đề an toàn, bạn cần tạo một đối tượng phiên cho mỗi yêu cầu trong môi trường đa luồng và một phiên cho mỗi yêu cầu trong các ứng dụng web.
getCurrentSession :- When you call SessionFactory. getCurrentSession, it will provide you session object which is in hibernate context and managed by hibernate internally. It is bound to transaction scope.
When you call SessionFactory. getCurrentSession , it creates a new Session if not exists , else use same session which is in current hibernate context. It automatically flush and close session when transaction ends, so you do not need to do externally.
If you are using hibernate in single threaded environment , you can use getCurrentSession, as it is faster in performance as compare to creating new session each time.
You need to add following property to hibernate.cfg.xml to use getCurrentSession method.
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
Nguồn
2017-08-17 11:22:30
Cảm ơn bạn rất nhiều, @gkamal. Tôi nhìn vào mã trong tài liệu [Open Session in View] (http://community.jboss.org/wiki/OpenSessionInView). (Liên kết của bạn trỏ đến các tài liệu đó.) Tác giả đề xuất sử dụng bộ lọc. Trong mã bộ lọc của mình, anh ta không gọi 'openSession()' hoặc 'close()'. Anh ta chỉ gọi 'getCurrentSession()'. Tôi đoán anh ta đặt 'current_session_context' thành' thread'. Bây giờ tôi nghĩ tôi hiểu 'getCurrentSession()'. Tuy nhiên, tôi không biết khi nào tôi nên sử dụng 'openSession()'. – wannik
Bạn sẽ sử dụng OpenSession nếu bạn không muốn phiên bị ràng buộc với bất kỳ ngữ cảnh nào. Có một số tình huống khi bạn sẽ cần một phiên khác - trừ một ràng buộc với ngữ cảnh (các trình chặn Hibernate có một giới hạn mà bạn không thể sử dụng phiên ban đầu) - trong những trường hợp này bạn sẽ sử dụng OpenSession thay vì currentSession. OpenSession tạo một phiên mới mà bạn phải đóng một cách rõ ràng.Đối với ví dụ, trong một phương pháp DAO, bạn sẽ gọi OpenSession - sử dụng phiên làm việc và đóng nó lại. – gkamal
đang sử dụng getCurrentSession(); bởi vì tôi đã khởi tạo nó trong bộ lắng nghe không phải là bộ lọc này là ok từ quan điểm của bạn; đang sử dụng mvc2 jsp servlet – shareef