Spring与iBATIS集成时,一对多表会出错的问题的解释
2009-01-22 16:23
369 查看
搞了几个小时,原来是这么回事。也许我们可以不使用ibatis的LAZY complex collection properties这个功能,多写几行代码自己组装算了。
以下内容转自: http://blog.csdn.net/horsefaced/archive/2007/01/23/1490663.aspx
在Spring中集成iBATIS中,如果orm的对象是一对多表时,会报NullPointerException.
这是因为ibatis在上一版本时,每次调用openSession时,
都会去localSqlMapSession中查找,如果没有才会打开个新的,而且会在返回前放入 localSqlMapSession中,
所以打开都是同一个session, 这被认为是一个BUG,所以在这个版本上改为返回一个新的session.而在这个session关闭时,才会
把这个session返回给sessionPool中, 而且也没有放回localSqlMapSession中.
而在spring中,在执行时,会设置新打开的session的setUserConnection方法.
因为新的session没有进入localSqlMapSession中,所以在打开一对多的表的子表时,
iBATIS从sessionPool中得到一个没有被spring设置过setUserConnection的session,从而
Transaction trans = getTransaction(session);这里没有得到缺省的连接,那么 trans =
autoStartTransaction(session, autoStart,
trans);代码里就会去找这个session的txManager来启动一个事务,但txManager又是null,于是就会发出
nullpoint异常了.
这时关键就是session的txManager是什么时候设置的.
我们可以看一下spring的SqlMapClientFactoryBean的代码就会发现,只有设置了它的dataSource属性时,才会去设置
session的txManager,
所以这里就可以看出在一对多表时,SqlMapClientFactoryBean的dataSource属性一定要设置,
这样能保证在一对多时才不会出问题.
以下内容转自: http://blog.csdn.net/horsefaced/archive/2007/01/23/1490663.aspx
在Spring中集成iBATIS中,如果orm的对象是一对多表时,会报NullPointerException.
这是因为ibatis在上一版本时,每次调用openSession时,
都会去localSqlMapSession中查找,如果没有才会打开个新的,而且会在返回前放入 localSqlMapSession中,
所以打开都是同一个session, 这被认为是一个BUG,所以在这个版本上改为返回一个新的session.而在这个session关闭时,才会
把这个session返回给sessionPool中, 而且也没有放回localSqlMapSession中.
而在spring中,在执行时,会设置新打开的session的setUserConnection方法.
因为新的session没有进入localSqlMapSession中,所以在打开一对多的表的子表时,
iBATIS从sessionPool中得到一个没有被spring设置过setUserConnection的session,从而
Transaction trans = getTransaction(session);这里没有得到缺省的连接,那么 trans =
autoStartTransaction(session, autoStart,
trans);代码里就会去找这个session的txManager来启动一个事务,但txManager又是null,于是就会发出
nullpoint异常了.
这时关键就是session的txManager是什么时候设置的.
我们可以看一下spring的SqlMapClientFactoryBean的代码就会发现,只有设置了它的dataSource属性时,才会去设置
session的txManager,
所以这里就可以看出在一对多表时,SqlMapClientFactoryBean的dataSource属性一定要设置,
这样能保证在一对多时才不会出问题.
相关文章推荐
- Spring与iBATIS集成时,一对多表会出错的问题的解释
- Spring与iBATIS集成时,一对多表会报NullPointerException问题的解释
- spring,ibatis集成的时候碰到问题
- Spring集成Ibatis详细介绍
- spring与XFire webservice集成的问题
- Spring BlazeDs 集成问题
- 主要讨论Spring与Hibernate集成中的session问题
- Spring集成Quartz定时任务的一些问题
- Struts集成Spring出错:Servlet action is not available 的解决
- Spring集成XFire开发WebService问题
- springmvc+mybatis+maven项目集成的时候遇到一个问题,项目搭起来以后,http请求怎么都进不到controller中,页面直接返回404错误,控制台没有报任何错误,请大神帮我看看
- IBATIS的sqlmap中特殊字符导致导出的execl打开出错问题的一点研究
- ios集成环信 easeUI SDK 3.0 SDK 2.0 出错遇到的所有问题
- struts2_spring整合出错问题
- [札记]SSM开发框架集成问题,Spring4.3.x+Mybatis3.4.x+SpringMVC集成时遇到的jason转换问题
- 【第八章】 对ORM的支持 之 8.3 集成iBATIS ——跟我学spring3
- iBatis与Spring集成时的批处理释疑
- spring-oauth集成cas单点登录,登陆完成进入授权页面后,按回退按钮进入404页面的问题
- Spring与iBATIS的集成
- Spring Boot集成Security使用数据库用户角色权限ROLE_问题