สมมติว่ามีเอนทิตี Student ซึ่งมีความสัมพันธ์แบบหนึ่งต่อหลายรายการกับเอนทิตีหัวเรื่องซึ่งโหลดอย่างเกียจคร้าน คำอธิบายประกอบ @OneToMany ใช้เพื่อระบุความสัมพันธ์ ฉันต้องการทำความเข้าใจการทำงานภายในของการไฮเบอร์เนตเกี่ยวกับวิธีการจัดการคำอธิบายประกอบนี้
คำอธิบายประกอบความสัมพันธ์แบบจำศีล (@OneToOne, @OneToMany ฯลฯ) ทำงานอย่างไร
comment
มันถูกเรียกว่าโอเพ่นซอร์สด้วยเหตุผลที่คุณรู้ :)
- person fvu   schedule 09.12.2013
comment
มันเป็นโอเพ่นซอร์ส แต่ฉันจำเป็นต้องรู้ว่าควรดูคลาสไหน มีตัวประมวลผลคำอธิบายประกอบที่จัดการเรื่องนี้หรือไม่? สมมติว่าวัตถุของนักเรียนมีการเติมข้อมูล แต่วิชาไม่ได้เกิดจากการโหลดแบบสันหลังยาว เมื่อฉันเรียก Student.getSubjects() ว่าเกิดอะไรขึ้น นั่นคือสิ่งที่ฉันอยากรู้
- person java_geek   schedule 09.12.2013
comment
คำอธิบายประกอบเป็นเพียงเครื่องหมาย ความมหัศจรรย์ที่แท้จริงนั้นทำได้ด้วยการทอผ้าหรือที่เรียกว่าการจัดการไบต์ - เมื่อโหลดคลาสจะถูกเขียนใหม่อย่างมีประสิทธิภาพเพื่อสร้างสิ่งต่าง ๆ เช่นความสัมพันธ์และการโหลดแบบขี้เกียจ
- person fvu   schedule 09.12.2013
comment
@fvu: ฉันต้องการทราบรายละเอียดบางอย่างของกระบวนการนั้น นั่นเป็นเหตุผลที่ฉันถามคำถาม มีลิงค์ใดบ้างที่สามารถช่วยฉันได้?
- person java_geek   schedule 09.12.2013
คำตอบ (1)
เมื่อสร้างอินสแตนซ์ของ Student จากข้อมูลที่อ่านในฐานข้อมูล Hibernate จะเริ่มต้นคอลเลกชัน subjects
ด้วยอินสแตนซ์ของการใช้งาน Collection ของตัวเอง (ซึ่งเรียกว่า PersistentCollection)
PersistentCollection นี้ไม่ได้เริ่มต้นตั้งแต่แรก และไม่มีข้อมูลใดๆ ในครั้งแรกที่เรียกใช้เมธอดใดๆ ของคอลเลกชั่นนี้ แบบสอบถาม SQL จะถูกดำเนินการเพื่อโหลดวิชาทั้งหมดของนักเรียน จากนั้นวิชาจะถูกแคชไว้ภายในคอลเลกชันสำหรับการเรียกใช้เมธอดที่ตามมาทั้งหมด
person
JB Nizet
schedule
09.12.2013
ฉันมีคำถามอื่น คุณช่วยบอกฉันได้ไหมว่าไฮเบอร์เนตรู้ได้อย่างไรที่รันไทม์ว่าคอลเลกชันจำเป็นต้องโหลดอย่างเกียจคร้าน มันจัดการไบต์โค้ด ณ เวลาคอมไพล์หรือมีคำอธิบายประกอบในรันไทม์หรือไม่?
- person java_geek; 09.12.2013
ใช่ คำอธิบายประกอบพร้อมใช้งานในขณะรันไทม์ เมื่อสร้างโรงงานเซสชันแล้ว ไฮเบอร์เนตจะวิเคราะห์คลาสเอนทิตีทั้งหมด
- person JB Nizet; 09.12.2013
ขอบคุณสำหรับการตอบรับ
- person java_geek; 10.12.2013