我看到很多地方的專家開發商建議LAZY加載持久實體爲了節省內存。你如何在你的應用程序中實際使用延遲加載?
的概念是相當清楚的:它是沒用加載你不打算使用噸的信息。
但是,在我的日常經驗中,應用這種最佳實踐根本不是微不足道的。我的意思是,如果我定義的依賴,比方說,一個DEPARTMENT
和EMPLOYEE
之間的一個一對多的關係,這是非常有可能我需要員工的名單,而在我的業務邏輯處理Department
。 這件事很常見,我發現自己在大多數情況下都使用EAGER加載。
從一個編程點,我所能做的最好是出貨吾道方法就是那樣的
public Department getDepartment(String departmentName, boolean eagerly)
其中eagerly
屬性設置爲true
觸發部的滿載標誌(這是默認加載的LAZY,我在事務內部調用getEmployees()
加載員工列表)。
你是如何處理這個問題的?你覺得LAZY裝載舒適嗎?如果是這樣,我錯過了什麼?
編輯:
根據我想討論下面的方法,使用Hibernate @Ayman解釋。
public class Node {
private Node parent;
private Set<Node> children;
public getParent(){
if(parent==null)
return Hibernate.initialize(parent);
return parent;
}
public getChildren(){
if(children==null)
return Hibernate.initialize(children);
return children;
}
}
這是一個可以接受的實現嗎?有什麼缺點?
我懷疑這個建議是在你可以的地方使用延遲加載。這並不意味着延遲加載在所有情況下都是有用的。例如,在交易系統中,您更喜歡急切的加載並且不用擔心很多內存成本。例如32 GB這幾天的成本大約是300美元。 –
認爲如果你不使用延遲加載,企業列表查詢也會加載其所有部門,這將加載其所有員工的列表,這將加載...決定什麼時候值得做一個雖然,急切的加載取決於問題。 – SJuan76