Spring与iBATIS集成时,一对多表会报NullPointerException问题的解释
2012-06-12 10:24
405 查看
搞了几个小时,原来是这么回事。也许我们可以不使用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集成时,一对多表会出错的问题的解释
- kotlin与Spring, 默认类,方法,property为final带来的问题--依赖注入失效,NullPointerException异常
- 解决tomcat6部署spring4+mybatisJSP页面产生的500错误,控制台报java.lang.NullPointerException的问题
- 深入学习Spring Boot排查 @Transactional 引起的 NullPointerException问题
- spring与ibatis集成, 在一对一表时,发生NullPointException异常,请教各位这个为什么?
- 解决tomcat6部署spring4+mybatisJSP页面产生的500错误,控制台报java.lang.NullPointerException的问题
- 重新打开Eclipse出现java.lang.NullPointerException的问题解决
- SPRING中BEAN注入成功,可是启动WEB服务器,调用方法时,BEAN全是空,NullpointerException
- butterknife8.0.1提示NullPointerException空指针的问题
- Spring整合jpa连接Oracle数据库向数据库中自动添加实体类表出现NullPointerException
- spring struts2 整合 action 注入service 报错NullPointerException
- android开发中遇到的问题解决之RelativeLayout执行measure(w,h)方法时,出现NullPointerException的异常情况
- butterknife8.0.1提示NullPointerException空指针的问题
- 照相机拍照NullPointerException 问题
- atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
- 求助学习mybatis的时候,报NullpointerException,sqlsessionfactory这里出现的问题
- Java对象数组初始化与NullPointerException问题
- 自定义控件引起布局文件中的NullPointerException问题
- 在java中java.lang.NullPointerException一般是哪的问题