SSH整合——Hibernate延迟加载引发的问题
来源:互联网 发布:ftp传输数据的具体方式 编辑:程序博客网 时间:2024/06/05 12:40
BUG描述:
bug1:
如图,所属部门没有显示,所属部门是一个实体类,员工也是一个实体类,其中一个属性就是部门。这里之所以没有显示就是因为Hibernate延迟加载引发的。
延迟加载介绍:(http://blog.csdn.net/xiaoyu714543065/article/details/8213027)
这里就是因为一开始加载Employee集合的时候,因为department属性未被使用,所以采用了延迟加载。当在jsp页面遍历Employee集合的时候,此时就用到了department属性,但是因为这里采用的是getHibernateTemplate(),session是由Spring注入管理的。而此时session已经被Spring关闭,所以无法加载显示。
解决方法1:配置hibernate时配置成不采用延迟加载lazy=“false”
解决方法二:添加如下代码
<filter> <filter-name>OpenSessionInViewFilter</filter-name> <filterclass>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter< /filter-class> </filter> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping>
该filter会将session绑定至当前请求的线程上,这样只要是在当前请求的生命周期内,可以随时访问session。
添加完成后,可以正常显示。
接着进行增加新员工信息的时候报错:
bug2:
原因当前是只读模式,无法进行写操作,因为我进行的是增加新用户操作,所以使用了保存操作.
两种方法:
1,web.xml中注册filter时,增加初始化参数(init-param,灵活性不高),进行修改
2,使用声明式事务代理(灵活性很高,推荐)
此处为使用方便,采取第一种:`
<init-param> <param-name>flushMode </param-name> <param-value>AUTO</param-value> </init-param>
结果还是同样的错误。再次百度,原来OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。故进行insert、 update和delete操作时会产生异常。因此需要采用spring的事务声明,使方法受transaction控制
对employee的service类添加事物管理后,添加正常
spring3.* + hibernate3.* 整合常见问题总结
Spring对Hibernate session的管理
Hibernate延迟加载与opensessioninviewFilter
OpenSessionInViewFilter 的配置及作用
后来再次实验添加的时候报错
bug3:
指我的employee引用了一个瞬时对象,请先保存该对象在进行操作。
经过排查,发现原来是我的部门没有选择,而且在jsp遍历的时候
<tr> <td>所属部门:</td> <td><s:select name="department.did" list="list" listKey="did" listValue="dname" headerKey="" headerValue="---请选择---"/> <td>编号:</td> <td><s:textfield name="eno" /></td> </tr>
headKey是指缺省值。我设置为空了,这样employee里的department属性相当于均为null,这样好像是不被允许的,原因暂时不清楚。只要给它一个默认值就好了。
struts2中标签的使用
- SSH整合——Hibernate延迟加载引发的问题
- hibernate的延迟加载问题
- hibernate—延迟加载
- Hibernate + Spring (quartz) 整合懒(延迟)加载问题
- hibernate延迟加载问题
- Hibernate延迟加载问题
- Hibernate延迟加载问题
- Hibernate延迟加载问题
- 解决Hibernate延迟加载出现的问题
- 关于Hibernate延迟加载的问题
- hibernate--get load延迟加载的问题
- Hibernate延迟加载与DAO模式的整合
- hibernate的延迟加载
- Hibernate的延迟加载
- hibernate 的延迟加载
- hibernate的延迟加载
- hibernate的延迟加载
- Hibernate 的延迟加载
- Handler中post方法的调用流程和使用场景
- 第053数组、排序、查找
- 第055讲 数组的使用细节
- PHP学习笔记——流程控制概述, PHP分支结构;
- CSS 图像透明/不透明
- SSH整合——Hibernate延迟加载引发的问题
- 动态规划
- Hadoop NameNode的Federation
- 49. Group Anagrams(unsolved)
- Pandas 文本数据方法 pad( ) center( ) ljust() rjust() zfill()
- BZOJ4750 密码安全
- linux目录命令基础
- 学习总结:Dsu on tree 树上启发式合并
- 将C++对象嵌入到带有上下文属性的QML中