春天& Hibernate:加载延迟集合

时间:2010-11-27 18:50:25

标签: hibernate spring lazy-loading

你如何明确地加载一个懒惰的对象/集合? 到目前为止,我发现唯一的方法是明确地要求对象的getter / setter,同时仍然附加到会话中:ie

List < Account > accounts = Bank.getAccounts();
accounts.get(i).getAccountNumber();

还有另一种不那么狡猾的方法吗?

我使用Spring btw,所以根据调用的服务,我想加载不同的集合/ obkjects

1 个答案:

答案 0 :(得分:13)

我不认为你这样做是狡猾的; hibernate的目标是透明的。

然而,还有其他选择:

1)如果要始终加载集合,可以在集合中使集合不是惰性的。小心加载太多数据......

2)如果你想有时加载集合,那么保留lazy = true并添加另一个DAO方法

loadBankWithAccounts()

并且要么做你正在做的事情,要么评论你为什么要初始化集合,要么使用带有fetch的HQL查询。查看文档。

3)查看hibernate文档的第19.1.4节,其中介绍了如何使用

之类的内容
Hibernate.initialize(bank.getAccounts())

允许您更清楚地了解集合初始化...