簡體   English   中英

您如何在應用程序中實際使用延遲加載?

[英]How do you PRACTICALLY use lazy loading in your application?

我看到很多地方的專家建議LAZY加載持久化實體以節省內存。

這個概念很清楚:它是沒用的,加載你不打算使用的信息噸。

但是,以我的日常經驗來應用這種最佳實踐並不是一件容易的事。 我的意思是, 如果定義了一個依賴關系 ,比如說DEPARTMENTEMPLOYEE之間的一對多關系,則很可能需要在我的業務邏輯中處理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM