Spring与iBATIS集成时,一对多表会报NullPointerException问题的解释
来源:互联网 发布:手机淘宝6.7.6版本 编辑:程序博客网 时间:2024/05/31 20:51
以下内容转自: 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集成时,一对多表会报NullPointerException问题的解释
- Spring与iBATIS集成时,一对多表会出错的问题的解释
- Spring与iBATIS集成时,一对多表会出错的问题的解释
- Spring与iBATIS的集成
- Spring与iBATIS的集成
- Spring与iBATIS的集成
- Spring与iBATIS的集成
- Spring与iBATIS的集成
- Spring与iBATIS的集成
- Spring与iBATIS的集成
- ibatis与spring的集成
- ibatis与spring的集成
- Spring与iBATIS的集成
- ibatis与spring的集成
- ibatis与spring的集成
- Spring与Ibatis集成
- spring,ibatis集成的时候碰到问题
- iBatis与Spring集成时的批处理释疑
- 《iPhone与iPad开发实战—iOS经典应用剖析》连载七
- shell 脚本查看 cpu 负载
- Java程序员从笨鸟到菜鸟之(七十六)细谈Hibernate(十八)悲观锁和乐观锁解决hibernate并发
- 【linux安全】移除不必要的服务
- 哑铃健身计划及图解说明
- Spring与iBATIS集成时,一对多表会报NullPointerException问题的解释
- FreeMarker中的null处理
- js调用谷歌地图V3
- copy_to_user,copy_from_user,get_user,put_user函数比较
- 清理系统垃圾
- cmd 命令切换盘符
- Xpath
- JavaScript传中文值给Action出现乱码问题解决和返回ajax 返回 输出 json 乱码
- SVN简介