问题分析:
这里报的是:数据延迟加载异常!
当取关联对象的非主键的其他字段的值,都会延迟加载(hibernate默认的)!由于当hibernate交给spring进行管理之后,连接对象实际上已经交给spring的一个叫TransactionAsychronizationManager进行管理, 默认的,在执行一个操作后,session将被关闭.这时如果代码访问的数据涉及延迟加载,将抛出延迟加载异常;
解决办法:
1。可以在多的一方(假定为A类)设置lazy = “FALSE”,即不延迟加载数据!
但是也有一些问题,就是当我不需要使用到一方(B类)的数据时,hibernate也会帮我把B的数据加载出来,这样一来的话,对程序的性能就有影响!所以我会采用下面这种优雅一点的方法!
值得注意的是:下面我所解决的只能是在Jnit的测试类中才可以手动配置连接对象的开启和关闭
2。下面的配置比较复杂,所以把思路整理了一下!但是通过手动编码就可以把后台类(数据访问层)进行一次完整的测试(增删改查--包括延迟加载),
手动配置如下:
@Before public void setUp() throws Exception { String config = "applicationContext.xml"; ctx = new ClassPathXmlApplicationContext(config); bookinfoBiz = (IBookinfoBiz)ctx.getBean("BookinfoBizImpl"); booktypeBiz = (IBooktypeBiz)ctx.getBean("BooktypeBizImpl"); //获得sessionFactory sessionFactory = (SessionFactory)ctx.getBean("sessionFactory");
//手动编码打开session Session session = sessionFactory.openSession(); //将session保存在SessionHolder ,并由TransactionSynchronizationManager进行管理 //保存 SessionHolder sessionHolder = new SessionHolder(session); //管理,绑定到本地线程 TransactionSynchronizationManager.bindResource(sessionFactory,sessionHolder); }
@After public void tearDown() throws Exception { //1.取出session SessionHolder sessionHolder = (SessionHolder)TransactionSynchronizationManager.getResource(sessionFactory); Session session = sessionHolder.getSession(); //清除 session.flush(); //从本地线程中取消绑定 TransactionSynchronizationManager.unbindResource(sessionFactory); //关闭连接 SessionFactoryUtils.closeSession(session); }
|
相关推荐
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/...
weblogic12 下最新 org.hibernate.hql.ast.HqlToken解决办法
Maven坐标:org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final; 标签:hibernate、javax、persistence、jpa、api、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...
No Hibernate Session bound to thread,没有绑定线程解决办法,找了好久才找到的
Maven坐标:org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.2.Final; 标签:hibernate、javax、persistence、jpa、api、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index...
包含hibernate所有所需jar包还有一些其他包日志包、jpa支持包等: 列如:hibernate-core-5.1.0.Final.jar hibernate-ehcache-5.1.0.Final.jar hibernate-entitymanager-5.1.0.Final.jar hibernate-envers-5.1.0....
org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider] at org.hibernate.service.internal....
解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...
零基础学Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajax(PPT).
内含hibernate3.2与修复java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V 的错误的cglib2.2
weblogic10 与hibernate冲突解决方案 错误如下:org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken linux windows 环境解决方案全解 Linux 启动脚本添加如下: export USER_...
0Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajaxdianzijiaocheng,个人正在学习中,没基础也很容易上手,强烈推荐,希望对大家有帮助
0Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajax电子文档
零基础学Java.Web开发 0Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajaxdianzijiaocheng
在eclipse上通过hibernate...重启eclipse即可生效(插件包所在路径是:D:\eclipse\plugins\org.hibernate.eclipse.libs_3.6.0.Final-v20130327-1513-B111\lib\tools\hibernate-tools-3.4.0.CR2.jar(版本号可能有出入))
零基础学Java[1].Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajax
org.hibernate.jpa.QueryHints jar hibernate-entitymanager-4.3.0.Final.jar
零基础学Java.Web开发:JSP.Servlet.Struts.Spring.Hibernate.Ajax(PPT) 的配套PPT,不错的提纲
NULL 博文链接:https://hw1287789687.iteye.com/blog/1967701