รับ () วิธีการ

หากคุณต้องการรับวัตถุด้วย ID (หรือคีย์หลัก) ของวัตถุนั้น Hibernate มีสามวิธีสำหรับสิ่งนี้:

  • โหลด ()
  • รับ()
  • หา()

พวกเขาทำสิ่งเดียวกัน แต่มีความแตกต่าง รูปแบบทั่วไปของ เมธอด get()คือ:

EntityClass Name = session.get(EntityClass.class, Object primaryKey);

เมธอดget()ใช้เป็นพารามิเตอร์ที่สอง ID (คีย์หลัก) ของวัตถุที่ต้องการส่งคืน จากนั้นจะโหลดวัตถุนั้นจากฐานข้อมูลและส่งกลับ ตัวอย่าง:

User user = session.get(User.class, 2);

หากไม่พบเรกคอร์ดที่มี ID นี้ในฐานข้อมูล เมธอดจะส่งคืนค่าว่าง

วิธีโหลด ()

วิธีที่สองสำหรับการโหลดวัตถุคือวิธีload() รูปแบบทั่วไปของ เมธอด load()เหมือนกัน:

EntityClass Name = session.load(EntityClass.class, Object primaryKey);

อย่างไรก็ตาม ลักษณะการทำงานของมันแตกต่างจากเมธอดget()

ขั้นแรก เมธอดนี้จะไม่ส่งคืนวัตถุจริง แต่ส่งกลับพร็อกซี: ต้นขั้วเสมือน

ประการ ที่สอง เมื่อใช้ เมธอด load()จะไม่มีการตรวจสอบว่ามีรายการดังกล่าวในฐานข้อมูลหรือไม่ ไฮเบอร์เนตจะสร้างวัตถุพร็อกซีทันทีด้วย ID ที่ส่งผ่านและส่งกลับ

ประการที่สาม การทำงานทั้งหมดกับฐานข้อมูลจะเกิดขึ้นเมื่อเรียกใช้เมธอดของวัตถุพร็อกซี ตัวอย่างเช่น หากคุณพยายามเรียกใช้ เมธอด getName()การเรียกครั้งแรกไปยังฐานข้อมูลจะเกิดขึ้น ตัวอย่าง:

User user = session.load(User.class, new Integer(123));
String name = user.getName(); //this is where the first call to the database will occur

ไม่ควรใช้เมธอดload() เพื่อตรวจสอบการมีอยู่ของวัตถุในฐานข้อมูล - มันจะไม่แสดงสิ่งนี้ นอกจากนี้ หากคุณส่ง ID ที่ไม่ถูกต้อง เช่น null ไปให้ ID ก็จะส่งคืนค่า null

ค้นหา () วิธีการ

เมธอดfind() ถูกส่งต่อไปยัง อินเทอร์เฟซเซสชันจากมาตรฐาน JPA และอย่างที่คุณทราบ มาตรฐานนี้ไม่ได้อธิบายเพียงแค่ลายเซ็นของเมธอด แต่ยังควบคุมลักษณะการทำงานด้วย

วิธี นี้ทำงานเหมือนกับ เมธอด get() หากคีย์ที่ผ่านไม่พบวัตถุเมธอดจะคืนค่าเป็นโมฆะ

User user = session.find(User.class, -2); //method will return null

วิธีรีเฟรช ()

อีก วิธีที่มีประโยชน์ที่เกี่ยวข้องกับการโหลดวัตถุจากฐานข้อมูลคือ วิธี การรีเฟรช ()

จำ วิธี คงอยู่ ()ที่อัปเดตข้อมูลในฐานข้อมูลตามวัตถุที่ส่งผ่านหรือไม่ ดังนั้น วิธี รีเฟรช ()จึงทำงานตรงกันข้าม นั่นคืออัปเดตวัตถุที่มีอยู่ตามข้อมูลจากฐานข้อมูล

ลักษณะการทำงานนี้จำเป็น เช่น เมื่อเขียนออบเจกต์ลงในฐานข้อมูล จะมีการเรียกใช้กระบวนงานที่จัดเก็บต่างๆ เพื่อแก้ไขข้อมูลที่เขียน

ในกรณีเช่นนี้ การอ่านวัตถุซ้ำจากฐานข้อมูลอาจมีประโยชน์หากมีโอกาสเปลี่ยนแปลง ตัวอย่าง:

User user = new User();
user.setName("Kolyan");
session.persist(user);
session.flush();  //Force called SQL INSERT and call triggers

session.refresh(user);
// here we continue to work with the updated object