ไฮเบอร์เนต - เซสชัน

เซสชันใช้เพื่อรับการเชื่อมต่อทางกายภาพกับฐานข้อมูล วัตถุเซสชันมีน้ำหนักเบาและออกแบบมาเพื่อสร้างอินสแตนซ์ทุกครั้งที่จำเป็นต้องมีการโต้ตอบกับฐานข้อมูล วัตถุถาวรจะถูกบันทึกและเรียกค้นผ่านวัตถุเซสชัน

ไม่ควรเปิดอ็อบเจ็กต์เซสชันไว้เป็นเวลานานเนื่องจากโดยปกติแล้วจะไม่ปลอดภัยกับเธรดและควรสร้างและทำลายวัตถุเหล่านั้นตามต้องการ หน้าที่หลักของเซสชันคือการเสนอสร้างอ่านและลบการดำเนินการสำหรับอินสแตนซ์ของคลาสเอนทิตีที่แมป

อินสแตนซ์อาจมีอยู่ในหนึ่งในสามสถานะต่อไปนี้ในช่วงเวลาที่กำหนด -

  • 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)

อัปเดตอินสแตนซ์ถาวรด้วยตัวระบุของอินสแตนซ์แยกที่กำหนด