使用Hibernate整合Spring,经常用到Spring对Hibernate进行了封装的一个类HibernateTemplate,此模板类中几乎包含了常用的方法,我现在说的是使用其中的一个简单的方法时遇到的问题及如何解决。 以下代码是一个简单的使用hibernateTemplate通过ID加载User的例子: package com.lideedu.yame; import org.hibernate.SessionFactory; public class UserDAO implements IUserDAO ...{ public void setSessionFactory( public void insert(User user) ...{ public User find(Integer id) ...{
注意:到上面调用的是hibernateTemplate的load()方法,执行上面那段代码将会抛出LazyInitiallizationException异常 这是因为HibernateTemplate的load()方法,将会用到session对象的load()方法,这将会使用Hibernate3默认的延迟加载功能,但HibernateTemplate执行完load()方法之后,会直接关闭session,所以在session关闭后再尝试去取User的属性,将会抛出异常LazyInitiallizationException 解决方法有三个: 1、改用HibernateTemplate的get()方法 2、实现HibernateCallback接口,并将实例传入给HibernateTemplate的execute()方法 .......... return user; }
在doInHibernate()方法的实现中,主动使用Hibernate.initialize()方法初始化User对象的属性。 3、直接在Hibernate的 .hbm.xml中设置"lazy"属性为"false",表示不使用延迟加载功能 <hibernate-mapping> <class name="com.lideedu.yame.User" <id name="id" column="id"> <property name="name" column="name"/> <property name="age" column="age"/> </class> </hibernate-mapping> |
使用HibernateTemplate发生LazyInitiallizationException的解决
最新推荐文章于 2020-05-10 13:33:03 发布
使用HibernateTemplate发生LazyInitiallizationException的解决
2007年11月29日 星期四 13:34