1, 当设置延迟策略lazy=“true”,session加载得到对象obj,随即session关闭,不能对实体进行操作,否则会发生初始化代理异常等错误。
例如:User user=session.load(User.Class,1);
session.close();
user.getName();(或者user.setName(String name))
此时会报错
1,ERROR LazyInitializer:63 - Exception initializing proxy
2,net.sf.hibernate.HibernateException: Couldnotinitializeproxy-theowningSessionwasclosed
(1)这是因为load方法得到的是User的一个代理实例,session并没有执行selec语句,所以这个代理实例的属性值并没有填充(仅id填充),即没有初始化该代理实例。
(2)当session关闭后,调用user.getName()方法,试图去执行select语句,而此时因为session已经关闭,不能够执行select语句来填充即初始化该代理实例,必然报错!
以下是正确的:
User user=session.load(User.Class,1);
session.close();
user.getId();这是因为id一直都是填充的,运行getId方法时不需要执行select语句填充代理。
注意:经过测试,user.setName(String name),System.out.println(manureInfo);在session关闭后,也不能正常执行,我的理解是:setName需要执行update操作,而此时session关闭,所以会发生异常!而打印manureInfo时,也需要对它初始化填充属性值,需要执行select操作,而此时的session关闭,则异常!