หากการสืบค้นแบบเรียงซ้อนเกิดขึ้นในไฮเบอร์เนตอาจมีปัญหาการโหลดขี้เกียจ ตัวอย่างเช่นตอนนี้ฉันมีคลาสบัญชี (ผู้ดูแลระบบ) หมวดหมู่ (หมวดหมู่ผลิตภัณฑ์) และคลาสผลิตภัณฑ์ (ผลิตภัณฑ์) จากซ้ายไปขวามันเป็นความสัมพันธ์แบบหนึ่งต่อหลายคนและจากขวาไปซ้าย @ManytoOne (fetch = fetchType.lazy) ถูกตั้งค่า ตอนนี้ฉันต้องการค้นหาข้อมูลผลิตภัณฑ์และจัดทำมันลงในรูปแบบ JSON เพื่อส่งผ่านไปยังแผนกต้อนรับ ฉันใช้คำสั่งค้นหาในพื้นหลังเป็น:
จากผลิตภัณฑ์ P ซ้ายเข้าร่วม Fetch P.Category โดยที่ p.name ชอบ: ชื่อ
ด้วยวิธีนี้คุณสามารถค้นหาผลิตภัณฑ์จากนั้นหมวดหมู่ในผลิตภัณฑ์ก็จะถูกนำมาใช้อย่างไรก็ตามบัญชีในหมวดหมู่ไม่ใช่วัตถุจริง แต่เป็นวัตถุพร็อกซีชั่วคราว นี่เป็นเรื่องง่ายที่จะเข้าใจเพราะฉันตรวจสอบผลิตภัณฑ์และหมวดหมู่ที่เรียงซ้อนกันเท่านั้น สำหรับหมวดหมู่และบัญชีจะถูกกำหนดค่าตามจริง (ขี้เกียจ)
ตอนนี้ใส่ผลิตภัณฑ์แบบสอบถามลงในแผนที่แล้วแปลงเป็นรูปแบบ JSON และกลับไปที่แผนกต้อนรับส่วนหน้าจะมีปัญหาการโหลดขี้เกียจอย่างแน่นอนเนื่องจากวัตถุบัญชีจะถูกนำไปใช้ในระหว่างกระบวนการแปลง JSON แต่เซสชันถูกปิดในเวลานี้ดังนั้นจะมีการรายงานข้อผิดพลาด ทางออกที่ตรงมาก แต่ไม่ค่อยดีคือการเปลี่ยนความขี้เกียจในหมวดหมู่เพื่อกระตือรือร้นเพื่อให้สามารถพบข้อมูลบัญชีได้ แต่สิ่งนี้ไม่ดี ดังนั้นเราจึงใช้วิธีอื่น: ตั้งบัญชีดำใน struts.xml และใช้นิพจน์ทั่วไปเพื่อกรองบัญชีในหมวดหมู่เมื่อแปลงเป็นรูปแบบ JSON ดังนั้นเราจะไม่ตรวจสอบวัตถุบัญชีและจะไม่มีปัญหาการโหลดความเกียจคร้าน ดังนี้:
ณ จุดนี้ไม่ควรมีปัญหา อย่างไรก็ตามในโครงการของฉันฉันยังคงรายงานข้อยกเว้นการโหลดขี้เกียจซึ่งหมายความว่ามันไม่ทำงานหลังจากที่ฉันกำหนดค่าด้วยวิธีนี้ แต่ในทางทฤษฎีหลังจากการกำหนดค่ามันจะโอเคและข้อมูลสามารถบรรจุในรูปแบบ JSON และส่งผ่านไปยังแผนกต้อนรับตามปกติ ปัญหานี้รบกวนฉันเป็นเวลาสองวันดังนั้นฉันจึงเปลี่ยนขี้เกียจที่จะกระตือรือร้นและเริ่มทำโครงการ
วันนี้ฉันติดต่อข้อยกเว้นที่นี่ในข้อยกเว้นไฮเบอร์เนตอื่นและแก้ไขมัน! วันนี้ในไฮเบอร์เนตฉันต้องการเรียกวิธีการรับข้อมูลผลิตภัณฑ์ แต่ฉันไม่สามารถรับได้ ไม่มีข้อความเกี่ยวกับคอนโซลพื้นหลัง เนื่องจากฉันเปิดโหมด dev แผนกต้อนรับจึงแสดงข้อความแสดงข้อผิดพลาด:
java.lang.classcastexception: cn.it.shop.model.product _ $$ _ javassist_0 ไม่สามารถส่งไปที่ javassist.util.proxy.proxy </span>
ไม่สามารถแปลงเป็นพร็อกซีได้หรือไม่? - ทำไมต้องเปลี่ยนเป็นตัวแทน? โดยทั่วไปแล้วตัวแทนไม่สามารถแปลงเป็นวัตถุจริงได้หรือไม่? ดังนั้นฉันจึงค้นหาอินเทอร์เน็ตและพบว่าปัญหานี้อาจเกิดจากแพ็คเกจ Javassist Jar ในโครงการที่ขัดแย้งกัน ฉันไปที่โครงการเพื่อตรวจสอบและมันก็กลายเป็นจริง:
มันขัดแย้งกันจริงๆ ... ดังนั้นฉันจึงลบ Javassist-3.11.0.ga.jar ในแพ็คเกจ Struts ไฮเบอร์เนตถูกต้องและคุณสามารถรับข้อมูลผลิตภัณฑ์ได้ตามปกติ จากนั้นฉันก็จำปัญหาของการเปลี่ยน struts2 เป็น JSON เมื่อ 2 วันก่อนดังนั้นฉันจึงกลับไปเปลี่ยนกระตือรือร้นกลับมาเป็นขี้เกียจ ปัญหาหายไปและฉันสามารถแปลงเป็น JSON ได้ตามปกติ ฉันรู้สึกหดหู่ มันเกิดจากความขัดแย้งระหว่างแพ็คเกจ JAR เนื่องจากไม่มีข้อผิดพลาดในเวลานั้น แต่ฉันไม่พบข้อมูล JSON ที่ส่งคืนบนแผนกต้อนรับ ฉันรู้แค่ว่าข้อมูล JSON ไม่ได้ถูกส่งคืน มันจะต้องเป็นปัญหากับการถ่ายโอนพื้นหลังไปยัง JSON จากประสบการณ์ที่มีอยู่ 90% ของมันกำลังโหลดขี้เกียจ แต่ฉันไม่ได้คาดหวังว่ามันจะเกิดจากความขัดแย้งของแพ็คเกจ JAR
ในภายหลัง: หากแพ็คเกจ JAR ไม่ขัดแย้ง แต่ไม่สามารถแปลง JSON ได้มันเป็นปัญหาที่เกิดจากการโหลดขี้เกียจ วิธีการกรองวัตถุที่กำลังโหลดขี้เกียจโดยการกำหนดค่าบัญชีดำใน struts.xml นั้นใช้งานได้จริง ไม่จำเป็นต้องแก้ไขการกำหนดค่าใน POJO ฉันจะโอนเขตข้อมูลที่ฉันต้องการถ่ายโอนไปยัง JSON และถ้าฉันไม่ต้องการมันก็สะดวกมาก
ลิงค์ดั้งเดิม: http://blog.csdn.net/eson_15/article/details/51394302
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น