[quote]
答案一:
当<class>元素或者<set>元素的lazy属性为true时,load() or get() or find()加载这些对象时,Hibernate不会马上产生任何select语句,只是产生一个Obj代理类实例,只有在session没有关闭的情况下运行Obj.getXxx()时才会执行select语句从数据库加载对象,如果没有运行任何Obj.getXxx()方法,而session已经关闭,Obj已成游离状态,此时再运行Obj.getXxx()方法,Hibernate就会抛出"Could not initialize proxy - the owning Session was closeed"的异常,是说Obj代理类实例无法被初始化。然而想在Session关闭之前不调用Obj.getXxx()方法而关闭Session之后又要用,此时只要在Session关闭之前调用Hibernate.initialize(Obj)或者Hibernate.initialize(Obj.getXxx())即可,net.sf.hibernate.Hibernate类的initialize()静态方法用于在Session范围内显示初始化代理类实例。
答案二:
抛出这个错误的主要原因我觉得并不是由于Session没有关闭造成的,这种问题我也遇到过,不过原因说不是很清楚,我用的hibernate3.0的lazy默认好像是true这个原因是没有初始化造成的,可以在session.close()之前把customer的一个属性输出来试一试,或者用Hibernate.initialize初始化,在或者干脆把lazy改为false行了。[/quote]
答案一:
当<class>元素或者<set>元素的lazy属性为true时,load() or get() or find()加载这些对象时,Hibernate不会马上产生任何select语句,只是产生一个Obj代理类实例,只有在session没有关闭的情况下运行Obj.getXxx()时才会执行select语句从数据库加载对象,如果没有运行任何Obj.getXxx()方法,而session已经关闭,Obj已成游离状态,此时再运行Obj.getXxx()方法,Hibernate就会抛出"Could not initialize proxy - the owning Session was closeed"的异常,是说Obj代理类实例无法被初始化。然而想在Session关闭之前不调用Obj.getXxx()方法而关闭Session之后又要用,此时只要在Session关闭之前调用Hibernate.initialize(Obj)或者Hibernate.initialize(Obj.getXxx())即可,net.sf.hibernate.Hibernate类的initialize()静态方法用于在Session范围内显示初始化代理类实例。
答案二:
抛出这个错误的主要原因我觉得并不是由于Session没有关闭造成的,这种问题我也遇到过,不过原因说不是很清楚,我用的hibernate3.0的lazy默认好像是true这个原因是没有初始化造成的,可以在session.close()之前把customer的一个属性输出来试一试,或者用Hibernate.initialize初始化,在或者干脆把lazy改为false行了。[/quote]