春季及;Hibernate:加载惰性集合

春季及;Hibernate:加载惰性集合,hibernate,spring,lazy-loading,Hibernate,Spring,Lazy Loading,如何明确地加载惰性对象/集合? 到目前为止,我发现实现这一点的唯一方法是在对象仍然连接到会话时明确地请求对象的getter/setter:ie List < Account > accounts = Bank.getAccounts(); accounts.get(i).getAccountNumber(); Listaccounts=Bank.getAccounts(); accounts.get(i).getAccountNumber(); 还有其他不那么狡猾的方法吗 顺便说

如何明确地加载惰性对象/集合? 到目前为止,我发现实现这一点的唯一方法是在对象仍然连接到会话时明确地请求对象的getter/setter:ie

List < Account > accounts = Bank.getAccounts();
accounts.get(i).getAccountNumber();
Listaccounts=Bank.getAccounts();
accounts.get(i).getAccountNumber();
还有其他不那么狡猾的方法吗


顺便说一句,我使用Spring,因此根据调用的服务,我希望加载不同的集合/对象

我不认为您这样做是不可靠的;hibernate的目标是透明

但是,还有其他选择:

1) 如果希望始终加载集合,可以在配置中使集合不延迟。小心加载太多数据

2) 如果您希望有时加载集合,请保留lazy=true并添加另一个DAO方法

loadBankWithAccounts()
或者执行您正在执行的操作,并对初始化集合的原因进行注释,或者使用带有fetch的HQL查询。查看文档

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

Hibernate.initialize(bank.getAccounts())

这使您可以更明确地进行集合初始化…

刚刚发现有类似Hibernate.initialize(proxy Obj)的东西,但它似乎不起作用。出现问题的地方是1-1关系。我只是做Hibernate.initialize(leerling.getFoto())@toomuchcs我用一些可能有用的东西更新了我的答案,就像你正在尝试的那样…@toomuchcs Hibernate.initialize只初始化简单的字段,不是关系…@Michael Wiles:那么我该如何初始化另一个对象或集合呢?就像你在问题中提到的,调用关系上的get。这和“初始化”在任何情况下都是一样的。这就是我一直在做的——工作。