คำอธิบายประกอบความสัมพันธ์แบบจำศีล (@OneToOne, @OneToMany ฯลฯ) ทำงานอย่างไร

สมมติว่ามีเอนทิตี Student ซึ่งมีความสัมพันธ์แบบหนึ่งต่อหลายรายการกับเอนทิตีหัวเรื่องซึ่งโหลดอย่างเกียจคร้าน คำอธิบายประกอบ @OneToMany ใช้เพื่อระบุความสัมพันธ์ ฉันต้องการทำความเข้าใจการทำงานภายในของการไฮเบอร์เนตเกี่ยวกับวิธีการจัดการคำอธิบายประกอบนี้


person java_geek    schedule 09.12.2013    source แหล่งที่มา
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
comment
ฉันมีคำถามอื่น คุณช่วยบอกฉันได้ไหมว่าไฮเบอร์เนตรู้ได้อย่างไรที่รันไทม์ว่าคอลเลกชันจำเป็นต้องโหลดอย่างเกียจคร้าน มันจัดการไบต์โค้ด ณ เวลาคอมไพล์หรือมีคำอธิบายประกอบในรันไทม์หรือไม่? - person java_geek; 09.12.2013
comment
ใช่ คำอธิบายประกอบพร้อมใช้งานในขณะรันไทม์ เมื่อสร้างโรงงานเซสชันแล้ว ไฮเบอร์เนตจะวิเคราะห์คลาสเอนทิตีทั้งหมด - person JB Nizet; 09.12.2013
comment
ขอบคุณสำหรับการตอบรับ - person java_geek; 10.12.2013