ไฮเบอร์เนต - เซสชัน
เซสชันใช้เพื่อรับการเชื่อมต่อทางกายภาพกับฐานข้อมูล วัตถุเซสชันมีน้ำหนักเบาและออกแบบมาเพื่อสร้างอินสแตนซ์ทุกครั้งที่จำเป็นต้องมีการโต้ตอบกับฐานข้อมูล วัตถุถาวรจะถูกบันทึกและเรียกค้นผ่านวัตถุเซสชัน
ไม่ควรเปิดอ็อบเจ็กต์เซสชันไว้เป็นเวลานานเนื่องจากโดยปกติแล้วจะไม่ปลอดภัยกับเธรดและควรสร้างและทำลายวัตถุเหล่านั้นตามต้องการ หน้าที่หลักของเซสชันคือการเสนอสร้างอ่านและลบการดำเนินการสำหรับอินสแตนซ์ของคลาสเอนทิตีที่แมป
อินสแตนซ์อาจมีอยู่ในหนึ่งในสามสถานะต่อไปนี้ในช่วงเวลาที่กำหนด -
transient - อินสแตนซ์ใหม่ของคลาสถาวรซึ่งไม่เกี่ยวข้องกับเซสชันและไม่มีการนำเสนอในฐานข้อมูลและไม่มีการพิจารณาค่าตัวระบุชั่วคราวโดยไฮเบอร์เนต
persistent- คุณสามารถทำให้อินสแตนซ์ชั่วคราวคงอยู่ได้โดยเชื่อมโยงกับเซสชัน อินสแตนซ์แบบถาวรมีการแสดงในฐานข้อมูลค่าตัวระบุและเชื่อมโยงกับเซสชัน
detached - เมื่อเราปิด Hibernate Session อินสแตนซ์ถาวรจะกลายเป็นอินสแตนซ์แยก
อินสแตนซ์เซสชันสามารถต่ออนุกรมได้หากคลาสแบบต่อเนื่องสามารถต่ออนุกรมได้ ธุรกรรมทั่วไปควรใช้สำนวนต่อไปนี้ -
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
// do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
หากเซสชันมีข้อยกเว้นธุรกรรมจะต้องถูกย้อนกลับและเซสชันจะต้องถูกยกเลิก
วิธีการเชื่อมต่อเซสชัน
มีหลายวิธีที่จัดทำโดย Sessionอินเทอร์เฟซ แต่ฉันจะแสดงรายการวิธีการที่สำคัญบางอย่างเท่านั้นซึ่งเราจะใช้ในบทช่วยสอนนี้ คุณสามารถตรวจสอบเอกสารไฮเบอร์เนตเพื่อดูรายการวิธีการทั้งหมดที่เกี่ยวข้องSession และ SessionFactory.
ซีเนียร์ | วิธีการและคำอธิบายเซสชัน |
---|---|
1 |
Transaction beginTransaction() เริ่มต้นหน่วยการทำงานและส่งคืนอ็อบเจ็กต์ธุรกรรมที่เกี่ยวข้อง |
2 |
void cancelQuery() ยกเลิกการดำเนินการของแบบสอบถามปัจจุบัน |
3 |
void clear() ล้างเซสชันโดยสมบูรณ์ |
4 |
Connection close() สิ้นสุดเซสชันโดยการปล่อยการเชื่อมต่อ JDBC และล้างข้อมูล |
5 |
Criteria createCriteria(Class persistentClass) สร้างอินสแตนซ์เกณฑ์ใหม่สำหรับคลาสเอนทิตีที่กำหนดหรือซูเปอร์คลาสของคลาสเอนทิตี |
6 |
Criteria createCriteria(String entityName) สร้างอินสแตนซ์เกณฑ์ใหม่สำหรับชื่อเอนทิตีที่กำหนด |
7 |
Serializable getIdentifier(Object object) ส่งคืนค่าตัวระบุของเอนทิตีที่กำหนดซึ่งเชื่อมโยงกับเซสชันนี้ |
8 |
Query createFilter(Object collection, String queryString) สร้างอินสแตนซ์ใหม่ของแบบสอบถามสำหรับคอลเล็กชันและสตริงตัวกรองที่กำหนด |
9 |
Query createQuery(String queryString) สร้างอินสแตนซ์ใหม่ของแบบสอบถามสำหรับสตริงแบบสอบถาม HQL ที่กำหนด |
10 |
SQLQuery createSQLQuery(String queryString) สร้างอินสแตนซ์ใหม่ของ SQLQuery สำหรับสตริงแบบสอบถาม SQL ที่กำหนด |
11 |
void delete(Object object) ลบอินสแตนซ์ถาวรออกจากที่เก็บข้อมูล |
12 |
void delete(String entityName, Object object) ลบอินสแตนซ์ถาวรออกจากที่เก็บข้อมูล |
13 |
Session get(String entityName, Serializable id) ส่งคืนอินสแตนซ์ถาวรของเอนทิตีที่ระบุด้วยตัวระบุที่กำหนดหรือค่าว่างหากไม่มีอินสแตนซ์ถาวรดังกล่าว |
14 |
SessionFactory getSessionFactory() รับโรงงานเซสชันที่สร้างเซสชันนี้ |
15 |
void refresh(Object object) อ่านสถานะของอินสแตนซ์ที่กำหนดอีกครั้งจากฐานข้อมูลพื้นฐาน |
16 |
Transaction getTransaction() รับอินสแตนซ์ธุรกรรมที่เชื่อมโยงกับเซสชันนี้ |
17 |
boolean isConnected() ตรวจสอบว่าเซสชันเชื่อมต่ออยู่หรือไม่ |
18 |
boolean isDirty() เซสชันนี้มีการเปลี่ยนแปลงใด ๆ ที่ต้องซิงโครไนซ์กับฐานข้อมูลหรือไม่ |
19 |
boolean isOpen() ตรวจสอบว่าเซสชันยังเปิดอยู่หรือไม่ |
20 |
Serializable save(Object object) คงอยู่ในอินสแตนซ์ชั่วคราวที่กำหนดก่อนกำหนดตัวระบุที่สร้างขึ้น |
21 |
void saveOrUpdate(Object object) บันทึก (Object) หรืออัปเดต (Object) อินสแตนซ์ที่กำหนด |
22 |
void update(Object object) อัปเดตอินสแตนซ์ถาวรด้วยตัวระบุของอินสแตนซ์แยกที่กำหนด |
23 |
void update(String entityName, Object object) อัปเดตอินสแตนซ์ถาวรด้วยตัวระบุของอินสแตนซ์แยกที่กำหนด |