spring MVC4与hibernate5整合事务问题
来源:互联网 发布:logo图标快速生成软件 编辑:程序博客网 时间:2024/06/06 20:03
自己写了一个springMVC+hibernate的博客
每个DispatchServlet会有一个自己的上下文,称为子上下文,它也保存在 ServletContext中,key 是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称。spring4 与 hibernate5整合之后,添加博客操作无论如何都不能成功,查看日志和debug发现,要么是transation无法绑定current session,要么就报transation是read-only的错误
可是我的事务明明是配置的read-only = false 啊。网上找了很多办法都失败了,包括在web.xml加session view过滤器;弃用hibernateTemplate和hibernateDaoSupport,选择直接注入sessionFactory,并且直接由getCurrentSession获取原生hibernate session,再进行save()操作 。还是不行。
后来发现问题是上下文问题(wtf ?),spring 本身是有个webApplicationContext上下文的存储在服务器sevletContext中,称之为父上下文。而对应于springMVC每个DispatchServlet(是的,可以配置多个)会有一个自己的上下文,称为子上下文,它也保存在 ServletContext中,key 是"org.springframework.web.servlet.FrameworkServlet.CONTEXT"+Servlet名称。
事务是配置在service层的,但执行注解扫描的时候controller\service\dao是在springMVC配置文件里扫描的,由此可知service bean 是绑定在了子上下文里,而对于spring事务的管理又是与spring mvc独立的,即配置在spring配置文件里,这时候transationManage是配置在父上下文里的。子上下文可以访问父上下文,但是父上下文不能访问子上下文。所以自然service层的事务管理是不能成功的。我把扫描service(需要dao对象的注入)的工作和扫描dao包的工作配置在spring配置文件里,即放在父上下文,这个时候事务就可以成功执行。问题解决!
关于父子上下文的问题可参考:
Spring 容器(Spring 的上下文)
- spring MVC4与hibernate5整合事务问题
- 在整合Spring+ Hibernate5的时候,声明式事务不能正确回滚问题
- Spring mvc4 + Hibernate5 Maven项目搭建
- Spring mvc4 + ActiveMQ 整合
- spring与mybatis整合的事务问题记录
- 使用Maven Hibernate5 之Spring整合
- spring4+struts2+hibernate5整合出现spring异常
- 关于Spring整合Hibernate事务问题
- spring mvc与mybatis事务整合
- spring与mybatis整合及事务控制
- spring与mybatis整合及事务控制
- mybatis3与spring整合之事务
- spring与mybatis整合及事务控制
- spring mvc与mybatis事务整合
- spring与mybatis整合及事务控制
- spring与mybatis整合及事务控制
- spring与mybatis整合及事务控制
- hibernate与spring整合:配置事务之后并不会滚的问题
- 第一次入门微信开发总结.
- word 的使用 —— 分页符与分节符
- [YTU]_2446( C++习题 输入输出--私有继承)
- 视频压缩编码和音频压缩编码的基本原理
- 第2章程序的基本结构
- spring MVC4与hibernate5整合事务问题
- 为什么需要浏览器引擎前缀
- JAVA基础——堆与栈的关系
- LINUX内核目录文件说明以及配置并编译内核的方法
- linux c下的c文件 h文件 o文件 so文件 a文件 可执行文件 gcc使用
- python自练小程序之(字典,列表,元祖)
- postman中 form-data、x-www-form-urlencoded、raw、binary的区别
- GDB 下的多线程多进程调试
- [YTU]_2474( C++习题 输入输出--保护继承)