Spring&Hibernate:加载延迟集合

too*_*hcs 6 spring hibernate lazy-loading

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

List < Account > accounts = Bank.getAccounts();
accounts.get(i).getAccountNumber();
Run Code Online (Sandbox Code Playgroud)

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

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

hvg*_*des 13

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

但是,还有其他选择:

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

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

loadBankWithAccounts()
Run Code Online (Sandbox Code Playgroud)

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

3)查看hibernate文档的第19.1.4节,它描述了如何使用类似的东西

Hibernate.initialize(bank.getAccounts())
Run Code Online (Sandbox Code Playgroud)

这使您可以更明确地使用集合初始化...