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_context
thread
ตอนนี้ฉันคิดว่าฉันเข้าใจgetCurrentSession()
แล้วopenSession()
แต่ผมไม่ทราบว่าเมื่อฉันควรใช้