我看到很多地方专家开发人员建议 LAZY加载持久化实体以节省内存。
这个概念很清楚:无用加载大量信息你不会使用。
然而,在我的日常经验中,应用这种最佳实践并不是微不足道的。我的意思是,如果我定义一个依赖,让我们说一个DEPARTMENT
和EMPLOYEE
之间的一对多关系,很可能我会在我的业务逻辑中处理Department
时需要员工列表。
这件事很常见,我发现自己在大多数情况下都会使用EAGER加载。
从编程的角度来看,我能做的最好的事情就是用这样的标志发送我的Dao方法
public Department getDepartment(String departmentName, boolean eagerly)
设置为eagerly
的{{1}}属性触发部门的完全加载(默认情况下加载了LAZY。我调用事务中的true
来加载员工列表)
你如何处理这个问题?你对LAZY装载感到舒服吗?如果是这样,我错过了什么吗?
修改
根据@Ayman的解释,我想用hibernate讨论以下方法。
getEmployees()
这是可以接受的实施吗?有什么缺点?
答案 0 :(得分:1)
这取决于具体情况。我不建议添加热切的标志,因为它暴露了您的图书馆的内部工作。它应该对用户透明。
我通常这样做的方法是在课堂上。该部门将有一份员工名单。阅读部门时,只需读取dept表并将emp数组保留为null。然后,当您必须访问员工时,查看列表是否已加载。应该相当容易实现并保护库用户不要知道lib的内部。