เซสชั่น: เป็นเซสชันระหว่างแอปพลิเคชันและฐานข้อมูลศูนย์กลางของการทำงานของไฮเบอร์เนตและพื้นฐานของการดำเนินการเลเยอร์การคงอยู่ วงจรชีวิตของวัตถุ/การจัดการธุรกรรม/การเข้าถึงฐานข้อมูลมีความสัมพันธ์อย่างใกล้ชิดกับเซสชัน
วัตถุเซสชันถูกสร้างขึ้นผ่าน SessionFactory นี่คือตัวอย่างที่จะแนะนำสองวิธีในการรับเซสชันโดยไฮเบอร์เนต
บันทึกเป็นข้อกังวลที่พบบ่อยมากในการเขียนโปรแกรม เมื่อผู้ใช้ทำงานบนฐานข้อมูลพวกเขาจำเป็นต้องบันทึกชุดการดำเนินงานชุดนี้เพื่อติดตามการเปลี่ยนแปลงของฐานข้อมูล ดังนั้นเมื่อผู้ใช้แทรกบันทึกลงในฐานข้อมูลพวกเขาจะต้องบันทึกบันทึกในไฟล์บันทึก ชุดการดำเนินงานของผู้ใช้จะต้องดำเนินการในเซสชั่นมิฉะนั้นจะกลายเป็นสองเธรด ไม่มีการรับประกันการซิงโครไนซ์ ดูรหัสต่อไปนี้
เครื่องมือเซสชันการจัดการ Hibernateutil
แพ็คเกจ com.bjpowernode.usermgr.util; นำเข้า org.hibernate.session; // hibernate3 นำเข้า org.hibernate.sessionfactory; นำเข้า org.hibernate.cfg.configuration; การกำหนดค่า (). configure (); // สร้าง SessionFactory Factory = cfg.buildsessionFactory ();} catch (ข้อยกเว้น e) {e.printStackTrace ();}} // รับเซสชันสาธารณะเปิดเซสชัน getSession () เซสชัน) {ถ้า (เซสชัน! = null) {if (session.isopen ()) {session.close ();}}} public Static SessionFactory GetSessionFactory () {return Factory;}}}}เลเยอร์ตรรกะทางธุรกิจของผู้ใช้
แพ็คเกจ com.bjpowernode.usermgr.Manager; นำเข้า java.util.date; นำเข้า org.hibernate.session; นำเข้า com.bjpowernode.usermgr.domain.log; นำเข้า com.bjpowernode.usermgr.domain.user.userments * ทั้งการเพิ่มผู้ใช้และการเพิ่มบันทึกใช้เซสชันเดียวกันดังนั้น * เมื่อเพิ่มผู้ใช้ล้มเหลวบันทึกจะล้มเหลวเช่นกัน การทำธุรกรรมการย้อนกลับ* ผู้ใช้เพิ่มบันทึกความสำเร็จและจะเพิ่มความสำเร็จ*/โมฆะสาธารณะ Adduser (ผู้ใช้ผู้ใช้) {เซสชัน = null; ลอง {// รับเซสชันเธรดปัจจุบัน = hibernateutils.getSessionFactory (). getCurrentSession () log.session; log "); log.settime (วันที่ใหม่ ()); log.setDetail (" xxx "); logManager logManager = ใหม่ logManagerimpl (); // บันทึก logs logManager.addlog (log); session.getTransaction (). commit ();คลาสการใช้งานบันทึก:
แพ็คเกจ com.bjpowernode.usermgr.manager; นำเข้า org.hibernate.session; นำเข้า com.bjpowernode.usermgr.domain.log; นำเข้า com.bjpowernode.usermgr.util.hibernateutils; Hibernateutils.getSessionFactory (). getCurrentSession (). บันทึก (บันทึก);}}
ชั้นเรียนทดสอบ
แพ็คเกจ com.bjpowerNode.usermgr.Manager; นำเข้า Junit.framework.testcase; นำเข้า com.bjpowernode.usermgr.domain.user; คลาสสาธารณะ UserManagerImplTest ขยาย testcase {โมฆะสาธารณะ testadduser () {usermanager usermanager = ผู้ใช้ใหม่ user.setName ("Zhang San"); userManager.adduser (ผู้ใช้); -สังเกต:
1. ความแตกต่างระหว่าง OpenSession และ GetCurrentSession คืออะไร?
*OpenSession จะต้องปิด currentsession จะถูกปิดโดยอัตโนมัติหลังจากการทำธุรกรรมเสร็จสิ้น
*OpenSession ไม่ผูกพันกับเธรดปัจจุบันกระแสจะถูกผูกไว้กับเธรดปัจจุบัน
2. หากคุณใช้ currentsession คุณต้องกำหนดค่าในไฟล์ hibernate.cfg.xml:
*หากเป็นธุรกรรมท้องถิ่น (ธุรกรรม JDBC)
<porementName = "hibernate.current_session_context_class"> เธรด </property>
*หากเป็นธุรกรรมทั่วโลก (ธุรกรรม JTA)
<porementName = "hibernate.current_session_context_class"> jta </poreport>
การทำธุรกรรมทั่วโลก: ธุรกรรมที่จัดการและประสานงานโดยนักสำรวจที่สามารถขยายฐานข้อมูลและกระบวนการหลายอย่าง โดยทั่วไปตัวจัดการทรัพยากรใช้โปรโตคอลการส่งสองขั้นตอน XA เพื่อโต้ตอบกับ "ระบบข้อมูลองค์กร" (EIS) หรือฐานข้อมูล
การทำธุรกรรมในท้องถิ่น: ธุรกรรมท้องถิ่นกับ EIS หรือฐานข้อมูลเดียวและ จำกัด อยู่ในกระบวนการเดียว การทำธุรกรรมในท้องถิ่นไม่เกี่ยวข้องกับแหล่งข้อมูลหลายแหล่ง
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับสองตัวอย่างรหัสของการได้รับเซสชันในไฮเบอร์เนต ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึง:
การวิเคราะห์อินสแตนซ์ของการเพิ่มการลบการแก้ไขและการค้นหาผ่านเซสชัน
เรียนรู้อย่างรวดเร็วเกี่ยวกับเซสชั่นในไฮเบอร์เนต
Hibernate ใช้ HBM.XML เพื่อกำหนดค่าการวิเคราะห์ความสัมพันธ์การแมป
หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!