คำถามติดแท็ก lazy-loading

9
ฉันจะทำให้ความสัมพันธ์ JPA OneToOne ขี้เกียจได้อย่างไร
ในแอปพลิเคชันนี้เรากำลังพัฒนาเราสังเกตว่ามุมมองนั้นช้าเป็นพิเศษ ฉันทำมุมมองและสังเกตว่ามีหนึ่งแบบสอบถามดำเนินการโดยจำศีลซึ่งใช้เวลา 10 วินาทีแม้ว่าจะมีเพียงสองวัตถุในฐานข้อมูลเพื่อดึงข้อมูล ทั้งหมดOneToManyและManyToManyความสัมพันธ์ที่มีความขี้เกียจเพื่อให้เป็นไม่ได้เป็นปัญหา เมื่อตรวจสอบ SQL ที่เกิดขึ้นจริงฉันสังเกตว่ามีการรวมมากกว่า 80 รายการในแบบสอบถาม การตรวจสอบเพิ่มเติมปัญหาฉันสังเกตเห็นว่าปัญหาเกิดจากลำดับชั้นลึกOneToOneและManyToOneความสัมพันธ์ระหว่างคลาสเอนทิตี้ ดังนั้นฉันคิดว่าฉันจะทำให้พวกเขาขี้เกียจที่จะแก้ปัญหา แต่คำอธิบายประกอบอย่างใดอย่างหนึ่ง@OneToOne(fetch=FetchType.LAZY)หรือ@ManyToOne(fetch=FetchType.LAZY)ดูเหมือนจะไม่ทำงาน ทั้งฉันได้รับข้อยกเว้นหรือไม่พวกเขาจะไม่ถูกแทนที่ด้วยวัตถุพร็อกซีและทำให้ขี้เกียจ ความคิดใดที่ฉันจะทำให้มันทำงานได้? โปรดทราบว่าฉันไม่ได้ใช้persistence.xmlเพื่อกำหนดความสัมพันธ์หรือรายละเอียดการกำหนดค่าทุกอย่างจะทำในรหัสจาวา

18
วิธีการแก้ไข org.hibernate.LazyInitializationException - ไม่สามารถเริ่มต้นพร็อกซี - ไม่มีเซสชัน
ฉันได้รับข้อยกเว้นต่อไปนี้: Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) at sei.persistence.wf.entities.Element_$$_jvstc68_47.getNote(Element_$$_jvstc68_47.java) at JSON_to_XML.createBpmnRepresantation(JSON_to_XML.java:139) at JSON_to_XML.main(JSON_to_XML.java:84) เมื่อฉันพยายามโทรจากสายหลักดังต่อไปนี้: Model subProcessModel = getModelByModelGroup(1112); System.out.println(subProcessModel.getElement().getNote()); ฉันใช้getModelByModelGroup(int modelgroupid)วิธีแรกเช่นนี้ public static Model getModelByModelGroup(int modelGroupId, boolean openTransaction) { Session session = SessionFactoryHelper.getSessionFactory().getCurrentSession(); Transaction tx = null; if …


4
Entity framework linq query รวม () เอนทิตีลูกหลายรายการ
นี่อาจเป็นคำถามที่เข้าใจง่ายมาก แต่วิธีที่ดีในการรวมหลายเอนทิตีเด็กเมื่อเขียนเคียวรีที่ครอบคลุมสามระดับ (หรือมากกว่านั้น) คืออะไร คือผมมี 4 ตาราง: Company, Employee, Employee_CarและEmployee_Country บริษัท มีความสัมพันธ์แบบ 1: m กับพนักงาน พนักงานมีความสัมพันธ์แบบ 1: m กับ Employee_Car และ Employee_Country ถ้าฉันต้องการเขียนแบบสอบถามที่ส่งคืนข้อมูลจากทั้ง 4 ตารางฉันกำลังเขียน: Company company = context.Companies .Include("Employee.Employee_Car") .Include("Employee.Employee_Country") .FirstOrDefault(c => c.Id == companyID); จะต้องมีวิธีที่สง่างามมากขึ้น! นี่เป็นเวลานานและสร้าง SQL ที่น่ากลัว ฉันใช้ EF4 กับ VS 2010

10
วิธีแปลงพร็อกซีไฮเบอร์เนตเป็นวัตถุเอนทิตีจริง
ในระหว่างการไฮเบอร์เนตSessionฉันกำลังโหลดวัตถุบางอย่างและบางส่วนถูกโหลดเป็นพร็อกซีเนื่องจากการโหลดแบบสันหลังยาว ไม่เป็นไรและฉันไม่ต้องการปิดการโหลดแบบขี้เกียจ แต่ต่อมาฉันต้องส่งวัตถุบางอย่าง (จริง ๆ แล้ววัตถุหนึ่งชิ้น) ไปยังไคลเอนต์ GWT ผ่าน RPC และมันเกิดขึ้นว่าวัตถุรูปธรรมนี้เป็นตัวแทน ดังนั้นฉันต้องเปลี่ยนมันเป็นวัตถุจริง ฉันไม่พบวิธีเช่น "materialize" ใน Hibernate ฉันจะเปลี่ยนบางสิ่งบางอย่างจากพร็อกซีไปยัง reals รู้คลาสและ ID ของพวกเขาได้อย่างไร ในขณะนี้ทางออกเดียวที่ฉันเห็นคือการขับไล่วัตถุนั้นออกจากแคชของไฮเบอร์เนตและโหลดใหม่ แต่มันก็แย่มากด้วยเหตุผลหลายประการ

2
JQuery เพื่อโหลดไฟล์ Javascript แบบไดนามิก
ฉันมีไฟล์จาวาสคริปต์ขนาดใหญ่มากฉันต้องการโหลดเฉพาะเมื่อผู้ใช้คลิกที่ปุ่มใดปุ่มหนึ่ง ฉันใช้ jQuery เป็นกรอบงานของฉัน มีวิธีการหรือปลั๊กอินในตัวที่จะช่วยฉันทำสิ่งนี้หรือไม่? รายละเอียดเพิ่มเติม: ฉันมีปุ่ม "เพิ่มความคิดเห็น" ที่ควรโหลดไฟล์จาวาสคริปต์ TinyMCE (ฉันได้ต้มไฟล์ TinyMCE ทั้งหมดลงในไฟล์ JS ไฟล์เดียว) จากนั้นเรียก tinyMCE.init (... ) ฉันไม่ต้องการโหลดสิ่งนี้ในการโหลดหน้าเริ่มต้นเพราะไม่ใช่ทุกคนที่จะคลิก "เพิ่มความคิดเห็น" ฉันเข้าใจว่าฉันทำได้: $("#addComment").click(function(e) { document.write("<script...") }); แต่มีวิธีที่ดีกว่า / ห่อหุ้มหรือไม่?

9
เหตุใด Hibernate Open Session in View จึงถือเป็นการปฏิบัติที่ไม่ดี
และคุณใช้กลยุทธ์ทางเลือกประเภทใดในการหลีกเลี่ยง LazyLoadExceptions? ฉันเข้าใจว่าเซสชันที่เปิดอยู่ในมุมมองมีปัญหากับ: แอปพลิเคชั่นแบบเลเยอร์ที่ทำงานใน jvm ที่แตกต่างกัน การทำธุรกรรมจะเกิดขึ้นในตอนท้ายเท่านั้นและส่วนใหญ่คุณอาจต้องการผลลัพธ์มาก่อน แต่ถ้าคุณรู้ว่าแอปพลิเคชันของคุณทำงานบน vm เดียวทำไมไม่คลายความเจ็บปวดของคุณโดยใช้กลยุทธ์การดูเซสชันแบบเปิด

8
วิธีโหลดภาพแบบไดนามิก (หรืออย่างเกียจคร้าน) เมื่อผู้ใช้เลื่อนดู
ฉันสังเกตเห็นสิ่งนี้ในเว็บไซต์ "สมัยใหม่" จำนวนมาก (เช่นการค้นหาภาพบน Facebook และ Google) ซึ่งรูปภาพด้านล่างของฝาพับจะโหลดเฉพาะเมื่อผู้ใช้เลื่อนหน้าลงมามากพอที่จะนำภาพเหล่านั้นเข้าไปในพื้นที่วิวพอร์ตที่มองเห็นได้ ( ตามแหล่งที่มาของการดูหน้าเว็บจะแสดงXจำนวน<img>แท็ก แต่ไม่ได้ดึงมาจากเซิร์ฟเวอร์ทันที ) เทคนิคนี้เรียกว่าอะไรทำงานอย่างไรและมีกี่เบราว์เซอร์ทำงานอย่างไร และมีปลั๊กอิน jQuery ที่สามารถบรรลุพฤติกรรมนี้ด้วยการเข้ารหัสขั้นต่ำหรือไม่ แก้ไข โบนัส: ใครสามารถอธิบายได้ว่ามี "onScrolledIntoView" หรือเหตุการณ์ที่คล้ายกันสำหรับองค์ประกอบ HTML ถ้าไม่ปลั๊กอินเหล่านี้ทำงานอย่างไร

11
ไฮเบอร์เนต: แนวทางปฏิบัติที่ดีที่สุดในการดึงคอลเลกชันขี้เกียจทั้งหมด
สิ่งที่ฉันมี: @Entity public class MyEntity { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Address> addreses; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Person> persons; //.... } public void handle() { Session session = createNewSession(); MyEntity entity = (MyEntity) …

13
Lazy Loading คืออะไร?
Lazy Loading คืออะไร? [แก้ไขหลังจากอ่านไม่กี่คำตอบ] ทำไมคนถึงใช้คำนี้บ่อยจัง? สมมติว่าคุณใช้ชุดระเบียน ASP / ADO และโหลดด้วย data หรือ ADO.NET Datasource สำหรับ gridview ฉันเดาว่าฉันน่าจะถามว่าทำไมคนถึงใช้คำว่า Lazy Loading ประเภท "อื่น ๆ " คืออะไร?

7
Entity Framework: จะปิดใช้งานการโหลดแบบขี้เกียจสำหรับแบบสอบถามเฉพาะได้อย่างไร
มีวิธีใดบ้างในการปิดใช้งานการโหลดแบบขี้เกียจสำหรับแบบสอบถามเฉพาะใน Entity Framework 6 ฉันต้องการใช้เป็นประจำ แต่บางครั้งฉันต้องการปิดการใช้งาน ฉันใช้คุณสมบัติเสมือนเพื่อขี้เกียจโหลด

3
ไฮเบอร์เนตการออกแบบแอปพลิเคชันแบบโหลดขี้เกียจ
ฉันมักจะใช้Hibernateร่วมกับSpring framework และเป็นความสามารถในการแบ่งเขตธุรกรรมแบบเปิดเผย (เช่น@Transactional ) อย่างที่เราทุกคนทราบกันดีว่าไฮเบอร์เนตพยายามที่จะไม่รุกรานและโปร่งใสที่สุดเท่าที่จะเป็นไปได้อย่างไรก็ตามสิ่งนี้พิสูจน์ได้ว่าท้าทายกว่าเล็กน้อยเมื่อใช้lazy-loadedความสัมพันธ์ ฉันเห็นทางเลือกในการออกแบบจำนวนมากที่มีระดับความโปร่งใสแตกต่างกัน ทำให้ความสัมพันธ์ไม่ขี้เกียจโหลด (เช่น fetchType=FetchType.EAGER) นี่มันม่วงทั้งไอเดียขี้เกียจโหลด .. เริ่มต้นคอลเลกชันโดยใช้ Hibernate.initialize(proxyObj); นี่หมายถึงการมีเพศสัมพันธ์ที่ค่อนข้างสูงกับ DAO แม้ว่าเราสามารถกำหนดอินเทอร์เฟซได้initializeแต่การใช้งานอื่น ๆ ก็ไม่รับประกันว่าจะให้สิ่งที่เทียบเท่า เพิ่มลักษณะการทำธุรกรรมให้กับModelอ็อบเจ็กต์ถาวร(โดยใช้พร็อกซีแบบไดนามิกหรือ@Transactional ) ฉันไม่ได้ลองใช้วิธีพร็อกซีแบบไดนามิกแม้ว่าฉันจะไม่เคยให้ @Transactional ทำงานกับวัตถุถาวรด้วยตัวเอง อาจเป็นเพราะการจำศีลนั้นกำลังดำเนินการกับพร็อกซีที่จะเข้ามา สูญเสียการควบคุมเมื่อมีการทำธุรกรรมเกิดขึ้นจริง ระบุทั้ง lazy / non-lazy API เช่นloadData()และloadDataWithDeps() บังคับให้แอปพลิเคชันรู้ว่าเมื่อใดควรใช้รูทีนใดการมีเพศสัมพันธ์ที่แน่นหนาอีกครั้ง วิธีล้นloadDataWithA(),, .... ,loadDataWithX() บังคับให้ค้นหาการอ้างอิงเช่นโดยจัดเตรียมbyId()การดำเนิน การเท่านั้น ต้องใช้กิจวัตรที่ไม่ใช่เชิงวัตถุจำนวนมากเช่นfindZzzById(zid)แล้วgetYyyIds(zid)แทนที่จะเป็นz.getY() การดึงแต่ละวัตถุในคอลเลกชันทีละรายการจะเป็นประโยชน์หากมีค่าใช้จ่ายในการประมวลผลระหว่างธุรกรรมจำนวนมาก สร้างส่วนหนึ่งของแอปพลิเคชัน @Transactional แทนDAOเท่านั้น ข้อควรพิจารณาที่เป็นไปได้ของธุรกรรมที่ซ้อนกัน ต้องใช้กิจวัตรที่ปรับให้เหมาะกับการจัดการธุรกรรม (เช่นเล็กน้อยพอเพียง) ผลกระทบทางโปรแกรมเล็กน้อยแม้ว่าอาจทำให้เกิดธุรกรรมจำนวนมาก จัดเตรียม DAO ด้วยโปรไฟล์การดึงข้อมูลแบบไดนามิกเช่นloadData(id, …

3
ใน webpack ฉันจะนำเข้าสคริปต์โดยไม่ประเมินได้อย่างไร
ฉันเพิ่งทำงานกับการเพิ่มประสิทธิภาพเว็บไซต์บางอย่างและฉันเริ่มใช้การแยกรหัสใน webpack โดยใช้คำสั่งนำเข้าเช่นนี้: import(/* webpackChunkName: 'pageB-chunk' */ './pageB') ซึ่งสร้างpageB-chunk.jsอย่างถูกต้องตอนนี้สมมติว่าฉันต้องการดึงข้อมูลอันนี้ใน pageA ฉันสามารถทำได้โดยเพิ่มคำสั่งนี้ในหน้า A: import(/* webpackChunkName: 'pageB-chunk' */ /* webpackPrefetch: true */ './pageB') ซึ่งจะส่งผลให้ <link rel="prefetch" href="pageB-chunk.js"> ถูกผนวกเข้ากับส่วนหัวของ HTML จากนั้นเบราว์เซอร์จะดึงข้อมูลล่วงหน้าจนดีมาก ปัญหาคือคำแถลงการนำเข้าที่ฉันใช้ที่นี่ไม่เพียง แต่ดึงไฟล์ js ล่วงหน้า แต่ยังประเมินไฟล์ js หมายความว่ารหัสของไฟล์ js นั้นถูกวิเคราะห์ & คอมไพล์เป็นไบต์รหัสระดับบนสุดของ JS นั้นจะถูกดำเนินการ นี่เป็นการดำเนินการที่ใช้เวลานานมากบนอุปกรณ์พกพาและฉันต้องการปรับให้เหมาะสมฉันต้องการเฉพาะส่วนprefetchเท่านั้นฉันไม่ต้องการชิ้นส่วนประเมิน & ดำเนินการเพราะต่อมาเมื่อมีการโต้ตอบของผู้ใช้เกิดขึ้นฉันจะเริ่มการแยกวิเคราะห์ & ประเมินตนเอง ↑↑↑↑↑↑↑↑ฉันต้องการทริกเกอร์สองขั้นตอนแรกเท่านั้นภาพมาจากhttps://calendar.perfplanet.com/2011/lazy-evaluation-of-commonjs-modules/ ↑↑↑↑↑↑↑ ↑↑ แน่ใจว่าฉันสามารถทำได้โดยการเพิ่มลิงค์ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.