โครงสร้างฐานข้อมูลมีดังนี้
มี member_id member (ตารางสมาชิกที่เกี่ยวข้อง) ในกลยุทธ์, กลยุทธ์คีย์ต่างประเทศ strategy_category (ตารางหมวดหมู่ที่เกี่ยวข้อง) และตำแหน่งคีย์ต่างประเทศ (ตารางที่เกี่ยวข้อง) ในตารางสมาชิก
หากหน้าแผนกต้อนรับค้นหาเนื้อหาของตาราง Stategy โดยตรงคำสั่ง HQL ของเราจะถูกเขียนเช่นนี้
stringhql = "fronstrategywhereid =: id";
คอนโซลจะรายงานข้อผิดพลาด nosesession นี่เป็นเพราะไฮเบอร์เนตขี้เกียจโหลดตามค่าเริ่มต้น เฉพาะเมื่อเราต้องการโหลดวัตถุที่เกี่ยวข้องจะโหลดวัตถุที่เกี่ยวข้อง ที่นี่เมื่อเซสชันถูกปิดเซสชั่นจะถูกรายงาน
ดังนั้นจะแก้ปัญหาได้อย่างไร
ที่นี่ขอแนะนำให้ใช้ leftjoinfetch เพื่อโหลดวัตถุแทนที่จะเปลี่ยนโหลดขี้เกียจเริ่มต้นในคำอธิบายประกอบเพื่อโหลดเร่งด่วนซึ่งจะมีประสิทธิภาพมาก
คำสั่งมีดังนี้
StrategyStrateGy = (กลยุทธ์) SessionFactoryUtil.getSession (). createquery ("fratstrategysleftjoinfetchs.strategycategoryleftjoinfetchs.memberleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id =: id")สิ่งที่คุณต้องทราบที่นี่คือเนื่องจากตารางสมาชิกที่เกี่ยวข้องเชื่อมโยงกับตารางตำแหน่งจึงต้องโหลดเข้าด้วยกัน อีกสิ่งหนึ่งที่คุณต้องทราบคือ S.ID ที่นี่จะต้องเขียนเช่นนี้เพราะชื่อคีย์หลักของแต่ละตารางที่นี่คือ ID หากไม่ได้ระบุระบบจะไม่สามารถระบุได้
สรุป
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ที่หารือเกี่ยวกับปัญหาการโหลดอย่างเร่งด่วนของไฮเบอร์เนต (สมาคมคีย์ต่างประเทศหลายแห่ง) ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!