openSession: เมื่อคุณโทรSessionFactory.openSessionมันจะสร้างSessionวัตถุใหม่และมอบให้คุณเสมอ
คุณจำเป็นต้องล้างและปิดวัตถุเซสชันเหล่านี้อย่างชัดเจน
เนื่องจากวัตถุเซสชันไม่ใช่เธรดที่ปลอดภัยคุณจึงต้องสร้างหนึ่งเซสชันอ็อบเจ็กต์ต่อหนึ่งคำขอในสภาพแวดล้อมแบบมัลติเธรดและหนึ่งเซสชันต่อคำขอในเว็บแอ็พพลิเคชันด้วย
getCurrentSession: เมื่อคุณโทรSessionFactory.getCurrentSessionมันจะให้วัตถุเซสชันแก่คุณซึ่งอยู่ในบริบทไฮเบอร์เนตและจัดการโดยไฮเบอร์เนตภายใน ผูกพันกับขอบเขตธุรกรรม
เมื่อคุณโทรระบบSessionFactory.getCurrentSessionจะสร้างใหม่Sessionหากไม่มีอยู่มิฉะนั้นให้ใช้เซสชันเดียวกันซึ่งอยู่ในบริบทไฮเบอร์เนตปัจจุบัน มันจะล้างและปิดเซสชันโดยอัตโนมัติเมื่อธุรกรรมสิ้นสุดลงดังนั้นคุณจึงไม่จำเป็นต้องทำภายนอก
หากคุณใช้โหมดไฮเบอร์เนตในสภาพแวดล้อมเธรดเดียวคุณสามารถใช้ได้getCurrentSessionเนื่องจากประสิทธิภาพการทำงานเร็วกว่าเมื่อเทียบกับการสร้างเซสชันใหม่ในแต่ละครั้ง
คุณต้องเพิ่มคุณสมบัติต่อไปนี้ในhibernate.cfg.xmlเพื่อใช้getCurrentSessionวิธี:
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">
thread
</property>
</session-factory>
openSession()close()เขาโทรgetCurrentSession(). เท่านั้น ผมคิดว่าเขากำหนดที่จะcurrent_session_contextthreadตอนนี้ฉันคิดว่าฉันเข้าใจgetCurrentSession()แล้วopenSession()แต่ผมไม่ทราบว่าเมื่อฉันควรใช้