java – spring如何允许延迟加载?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – spring如何允许延迟加载?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2135字,纯文字阅读大概需要4分钟。
内容图文
如果您使用Dao方法(伪代码)进行调用:
return ..getHibernateTemplate(get by id);
现在说该实体有一个延迟加载的集合.一旦你使用hibernateTemplate助手方法从你的Dao返回,为什么会话保持在范围内并允许你延迟加载一个集合?
会话是基于每个请求在全局级别初始化和提交的吗?
更新
请解释一下“getcurrentsession”的确切调用,以及它何时实际关闭/提交?
根据我的理解,spring框架必须处理会话生命周期,它在哪里执行此操作?请求生命周期中的什么时候?
它也在处理工作单元,在哪里/如何?
解决方法:
Once you return from your Dao using the hibernateTemplate helper method, how come the session stays in scope and allows you to lazy-load a collection?
因为Session尚未关闭,因此您的实体仍然是Persistent(而不是Detached对象状态).只要您的实体尚未分离,您就可以延迟加载集合和代理.有关这些状态的更多详细信息,请参见第10.1. Hibernate object states章(理解它们和使用的术语非常重要).
Is the session initialized and committed at a global level on a per request basis?
对于Web应用程序,通常是每个请求.如HibernateTemplate的javadoc所述:
Lazy loading will also just work with an open Hibernate Session, either within a transaction or within OpenSessionInViewFilter/Interceptor.
如果你看一下OpenSessionInViewFilter或OpenSessionInViewInterceptor的javadoc,你会发现它们略有不同,但它们都将Hibernate Session绑定到线程以进行整个请求处理,并提供“Open Session in View”模式的实现.
Please explain where exactly the call to ‘getcurrentsession’ is made, and when is it actually closed/committed?
您可以查看源代码并使用调试器,您知道:)查看HibernateTemplate,更准确地说是doExecute()方法,这是获取会话的地方.对于关闭/提交,请查看前面提到的OpenSessionInViewFilter / Interceptor,两者都有用于此目的的方法.
From what I understand, the spring framework has to handle the session lifecycle, where does it do this? at what point the in the requests lifecycle?
我想我已经介绍了这一部分:会话是在请求开始时创建的,最后是关闭的.
It is handling the Unit of work also, where/how?
我不确定能得到这个.对我来说,Hibernate的Session是一个工作单元模式的实现.所以这个问题实际上与前一个问题相同.
PS:我提供了一些链接,表明一切都是清楚记录的. Spring和Hibernate有非常好的文档和javadoc.利用它,自己查看它们,自己查看代码,使用调试器,你将学到更多东西.
内容总结
以上是互联网集市为您收集整理的java – spring如何允许延迟加载?全部内容,希望文章能够帮你解决java – spring如何允许延迟加载?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。