รับ () วิธีการ
หากคุณต้องการรับวัตถุด้วย 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
GO TO FULL VERSION