1

我看到很多地方专家开发人员建议LAZY 加载持久化实体以节省内存。

这个概念很清楚:加载大量你不会使用的信息是没有用的。

但是,根据我的日常经验,应用这种最佳实践并非易事。我的意思是,如果我定义了一个 dependencyDEPARTMENT ,比如说 a和 an之间的一对多关系EMPLOYEE,我很可能在处理我的业务逻辑时需要员工列表。Department这件事很常见,我发现自己在大多数情况下都使用 EAGER 加载。

从编程的角度来看,我能做的最好的就是用这样的标志来发送我的 Dao 方法

public Department getDepartment(String departmentName, boolean eagerly)

其中eagerly属性设置为true触发部门的完整加载(默认为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;
        }
    }

这是一个可以接受的实现吗?有什么缺点?

4

1 回答 1

1

这取决于实际情况。我不建议添加 Eagerly 标志,因为它会暴露库的内部工作。它应该对用户透明。

我通常这样做的方式是在课堂上。该部门将有一份员工名单。读取部门时,只需读取dept表并将emp数组保留为null。然后,当您必须访问员工时,请查看列表是否已加载。应该相当容易实现并且使库用户不知道库的内部结构。

于 2013-06-23T11:05:16.203 回答