[英]How do you PRACTICALLY use lazy loading in your application?
我看到很多地方的專家建議LAZY加載持久化實體以節省內存。
這個概念很清楚:它是沒用的,加載你不打算使用的信息噸。
但是,以我的日常經驗來應用這種最佳實踐並不是一件容易的事。 我的意思是, 如果定義了一個依賴關系 ,比如說DEPARTMENT
和EMPLOYEE
之間的一對多關系,則很可能需要在我的業務邏輯中處理Department
時需要雇員列表。 這件事很普遍,我發現自己在大多數情況下都使用EAGER加載。
從編程的角度來看,我能做的最好的事情就是為我的Dao方法提供一個像這樣的標志
public Department getDepartment(String departmentName, boolean eagerly)
將eagerly
屬性設置為true
會觸發Department的完全加載(默認情況下為LAZY加載。我在事務內調用getEmployees()
來加載雇員列表)。
您如何處理該問題? 您對LAZY加載感到舒適嗎? 如果是這樣,我有什么遺漏嗎?
編輯:
根據@Ayman的解釋,我想與Hibernate討論以下方法。
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;
}
}
是否可以接受? 有什么缺點?
這取決於實際情況。 我不建議添加eagerly標志,因為它公開了庫的內部工作。 對用戶應該是透明的。
我通常的做法是在課堂上。 該部門將有一份雇員清單。 讀取部門時,只需讀取dept表並將emp數組保留為空。 然后,當您必須訪問員工時,請查看列表是否已加載。 應該相當容易實現,並且可以避免庫用戶知道lib的內部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.