Hibernate get对象的懒加载问题

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.wolf.a_StudentManageSystem.domain.Teacher.courses, could not initialize proxy - no Session

at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:575)

at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:214)

at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:554)

at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:142)

at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:316)

at java.lang.String.valueOf(String.java:2854)

at java.lang.StringBuilder.append(StringBuilder.java:128)

at com.wolf.a_StudentManageSystem.domain.Teacher.toString(Teacher.java:28)

at java.lang.String.valueOf(String.java:2854)

at java.io.PrintStream.println(PrintStream.java:821)

at com.wolf.a_StudentManageSystem.DaoImpl.TeacherDaoImplTest.testGetById(TeacherDaoImplTest.java:35)

懒加载问题:

Hibernate在get对象时,如果含有集合或者实体,会懒加载。

可以在集合的属性配置里,设置 lazy="false",或者实体类属性配置为lazy="false"。

来自为知笔记(Wiz)

时间: 2024-12-28 18:50:27

Hibernate get对象的懒加载问题的相关文章

Hibernate中的延迟加载(懒加载)

什么是懒加载? Hibernate提供了一种机制,即在设置了使用懒加载的情况下,查询某一条数据时不会立即访问数据库,因此不会返回指定对象,而是返回代理对象,该代理对象并不为null,它实际上是Hibernate自动实现的指定对象所属类的子类的对象,该对象具有默认值.当要使用真正对象的属性的时候才会访问数据库,这时代理对象会自动查询数据库中对应对象的数据并返回. 这样一来降低了程序对数据库访问次数和内存使用量.下面我们通过懒加载适用情况分析它究竟是如何做到的. 懒加载的适用情况? 1.获取某一个对

Hibernate学习笔记(八) — 懒加载与抓取策略

懒加载(Load On Demand)是一种独特而又强大的数据获取方法,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用.总结一句话:什么时候需要数据,什么时候加载. 一.懒加载 1.1 类的懒加载 由javassist产生的代理类与Classes类是继承关系, session.load()方法产生的是代理对象,该代理类是持久化类的子类 /** * 类的懒加载 */ @Test public void testClass_l

Hibernate 性能优化之懒加载

针对数据库中的大数据,不希望特别早的加载到内存中,当用到它的时候才加载 懒加载分为:类的懒加载.集合的懒加载.单端关联的懒加载 类的懒加载    1.在默认情况下,类就是执行懒加载        2.只有使用了load方法以后才能用懒加载    3.如果在相应的映射文件中,设置<class>的lazy="false"懒加载将失去效果集合的懒加载     1.针对一多对的情况或者多对多的情况    2.根据一方加载set集合,决定在什么时候给set集合填充数据        

Hibernate(九)__OpenSessionInView解决懒加载问题

什么是OpenSessionInView? 在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常. 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V层使用这些数据,这时才会迫使load加载数据,我们就希望这时的session是open着得,这就是所谓的Open Sessi

hibernate 一对一关联关系 及其懒加载,总结

一对一,则有主对象和从对象之区别 若无主对象,则从对象亦无存在之意义. 主对象为person 从对象为idcard <hibernate-mapping package="cn.itcast.hibernate.domain"> <class name="Person"> <id name="id"> <generator class="native" /> </id>

Hibernate的延迟加载 ,懒加载,lazy

Hibernate延迟加载有很多配置方法,本文主要说明几种常用的配置方法,以及在Session的get()和load()方法,Query对象的iterator()和list()方法中的效果.下面是本例用到的两张表.实体类和配置信息: Company表: Employee表(employee_company_id为外键) Company实体类: import java.util.Set; public class Company {    private int companyId;    pri

hibernate懒加载

16.懒加载 性能: 发出的sql语句越少,性能越高 方法: 1.懒加载 2.抓取策略 3.缓存策略 4.HQL语句   懒加载 1.类的懒加载 1.利用session.load方法可以产生代理对象 2.在session.load方法执行的时候并不发出sql语句 3.在得到其一般属性的时候发出sql语句 4.只针对一般属性有效,针对标示符属性是无效的 5.默认情况就是懒加载  2.集合的懒加载 <set name=""  lazy="" cascasd=&qu

Hibernate一对一,一对多懒加载的要求

懒加载要求Domain对象不能是final的,因为Hibernate需要生成一个继承自该Domain对象的类来实现懒加载.懒加载主要有三种: 1. 对象的懒加载 2. 关联集合的懒加载 3. 对象属性的懒加载 对象的懒加载 对象的懒加载就是在映射文件的class标签中设置lazy属性为true,这时,如果用session.load方法获取这个对象的话,Hibernate只返回一个代理对象,而不是真的去查询数据库,等到真正用到这个对象的时候,Hibernate才会去查询数据库. 关联集合的懒加载

hibernate 设置懒加载自动为字段添加属性

hibernate错误:org.apache.struts2.json.JSONWriter can not access a member of class org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper with modifiers "public" 解释是当action执行完,return success返回xml文件后,前提是你设置了懒加载之后,hibernate自动为你懒加载的实