工作中遇到的问题和解决办法8(could not initialize a collection的问题)
2007-06-08 16:33
776 查看
07年6月8日
(1)could not initialize a collection的问题已经解决
这几天很郁闷,一直在为这个问题苦恼~代码也看过了,配置文件也都没有错.在百度GOOGLE上泡了几天,虽然也有出现同样的问题,在问题的最后都没有回复的答案,最后都是些已经沉得不能再沉的死帖啦!
今天幸而把该问题解决,目的在于希望以后碰到这类问题的朋友能尽快的找到问题的答案,不至于再像我这般苦恼而重蹈覆辙.
好了,废话不多说了~
首先来看看问题引起的原因.下面是我的代码:
ItemDAO itemDAO = new ItemDAO();
Item item2 =new Item();
item2 =itemDAO.findById(item.getItemId());
Hibernate.initialize(item2.getStoreItems());
...事务...关闭Session...
也就是在代码执行到Hibernate.initialize(item2.getStoreItems());出现了这般问题.
出现这个问题是因为我使用的是Tomcat+JDBC驱动连接MSSQL数据库导致的.
其实并不是本身JDBC驱动不好.问题是MS的JDBC驱动(也就是3个JAR包)不支持二次查询导致的.
而用过Hibernate的人都知道,在用*.hbm.xml文件中通常用Set的时候需要采用延时的检索机制来减少不必要的开销.当如果我们需要采取立即检索的时候,通常是在代码中调用Hibernate.initialize()方法,而不是将lasy改为false,理由是这样程序员可以根据业务需要来控制检索策略.
当我们之前调用itemDAO.findById(item.getItemId());的时候,Hibernate会到DB中去检索一次数据,由于set的lasy属性为true,因此只是单纯的执行:
select * from table where ID=?
而当执行Hibernate.initialize(item2.getStoreItems());则Hibernate会根据上次查询的结果再次去DB中检索数据,但是...JDBC不支持二次查询,因此最后就直接反馈给我们
could not initialize xxxxxx....
最后解决问题的办法:更换驱动
用JTDS驱动,也就是采用jtds-1.2.jar而不用msbase.jar、mssqlserver.jar、msutil.jar这三个JAR包。将jtds-1.2.jar放到我们的lib目录的构件路径下。再次测试,成功通过。^-^
(1)could not initialize a collection的问题已经解决
这几天很郁闷,一直在为这个问题苦恼~代码也看过了,配置文件也都没有错.在百度GOOGLE上泡了几天,虽然也有出现同样的问题,在问题的最后都没有回复的答案,最后都是些已经沉得不能再沉的死帖啦!
今天幸而把该问题解决,目的在于希望以后碰到这类问题的朋友能尽快的找到问题的答案,不至于再像我这般苦恼而重蹈覆辙.
好了,废话不多说了~
首先来看看问题引起的原因.下面是我的代码:
ItemDAO itemDAO = new ItemDAO();
Item item2 =new Item();
item2 =itemDAO.findById(item.getItemId());
Hibernate.initialize(item2.getStoreItems());
...事务...关闭Session...
也就是在代码执行到Hibernate.initialize(item2.getStoreItems());出现了这般问题.
出现这个问题是因为我使用的是Tomcat+JDBC驱动连接MSSQL数据库导致的.
其实并不是本身JDBC驱动不好.问题是MS的JDBC驱动(也就是3个JAR包)不支持二次查询导致的.
而用过Hibernate的人都知道,在用*.hbm.xml文件中通常用Set的时候需要采用延时的检索机制来减少不必要的开销.当如果我们需要采取立即检索的时候,通常是在代码中调用Hibernate.initialize()方法,而不是将lasy改为false,理由是这样程序员可以根据业务需要来控制检索策略.
当我们之前调用itemDAO.findById(item.getItemId());的时候,Hibernate会到DB中去检索一次数据,由于set的lasy属性为true,因此只是单纯的执行:
select * from table where ID=?
而当执行Hibernate.initialize(item2.getStoreItems());则Hibernate会根据上次查询的结果再次去DB中检索数据,但是...JDBC不支持二次查询,因此最后就直接反馈给我们
could not initialize xxxxxx....
最后解决问题的办法:更换驱动
用JTDS驱动,也就是采用jtds-1.2.jar而不用msbase.jar、mssqlserver.jar、msutil.jar这三个JAR包。将jtds-1.2.jar放到我们的lib目录的构件路径下。再次测试,成功通过。^-^
相关文章推荐
- SSH - org.hibernate.LazyInitializationException: could not initialize proxy - no Session问题解决办法
- 出现org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed问题以及解决办法
- 工作遇到的问题和解决办法6
- Could not locate executable null 解决办法【在windows环境下开发hadoop2.4.1或者hadoop2.5.2的mapreduce,执行job遇到的一些错误】
- 遇到could not find developer disk image 问题怎么解决
- eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes .
- hibernate3中出现 could not initialize proxy - no Session 错误的解决办法以及lazy load的介绍
- could not resolve host: github.com 问题解决办法
- 关于android编程中遇到的Could not find class 'com.swetake.util.Qrcode错误的原因及解决办法
- 工作中遇到的问题及解决办法17
- LoadRunner在性能测试工作中遇到的问题以及解决办法小结
- eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes .
- Error:Could not initialize class com.android.ide.common.util.ReadWriteProcessLock 解决办法
- 解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session懒加载问题
- eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes .
- 使用apktool工具遇到could not decode arsc file的解决办法
- Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决! 我同事遇到的问题。 用户名/
- 关于VS中遇到System.IO.FileNotFoundException问题的解决办法
- CentOS 7 安装问题:dracut_initqueue[599]: Warning: Could not boot 原因,及解决办法
- eclipse 配置Maven问题解决办法:新建maven工程时报错:Could not resolve archetype org.apache.maven.archetypes .