08:37:15,203 ERROR LazyInitializationException:19 - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:150)
at com.bjsxt.oa.model.Orgnization$$EnhancerByCGLIB$$8b056ba1.getParent(<generated>)
at com.bjsxt.oa.web.actions.OrgAction.execute(OrgAction.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
package com.bjsxt.oa.model;
import java.util.Set;
public class Orgnization { 
private int id; 
private String name; 
private String sn; 
private String description; 
private Orgnization parent; 
private Set children;
..... 
}hibernate-mapping>
  <class table="t_orgnization" name="com.bjsxt.oa.model.Orgnization">
  <id name="id">
  <generator class="native"/>
  </id>
  <property name="name"/>
  <property name="sn"/>
  <property name="description"/>
    
  <many-to-one column="pid" name="parent" />
  <set lazy="false" inverse="true" name="children">
  <key column="pid"/>
  <one-to-many class="com.bjsxt.oa.model.Orgnization" />
  </set>
  </class>
</hibernate-mapping>if(parentId != 0){
  Orgnization org = orgManager.findOrg(parentId);
  Orgnization parent = org.getParent();(执行这句开始出错)  
  if(parent != null){
  ppid = parent.getId();
  }
  }
 request.put("ppid", ppid);

解决方案 »

  1.   

    在web.xml里配置opensessionInViewFilter <filter>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    <param-name>flushMode</param-name>
    <param-value>AUTO</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>OpenSessionInViewFilter</filter-name>
    <servlet-name>action</servlet-name>
    </filter-mapping>
      

  2.   

    我在web.xml里配置opensessionInViewFilter了,也不行
      

  3.   

    该SQL即可:from A表 a left join fetch a.Orgnization对象在A表中变量名
      

  4.   

    依楼主的异常看,还应该是延迟加载的问题。Hibernate在默认情况下对集合、依赖的对象等会进行延迟加载。Orgnization org = orgManager.findOrg(parentId);在获取org对象后,与之关联的session关闭,(不过现在看不出是何原因)。Orgnization parent = org.getParent();在试图获取parent时,因与之关联的session关闭,导致无法延迟加载parent对象。
    建议楼主先将<many-to-one/>的lazy属性设置为false,再看看会出现什么状况。
      

  5.   

    <!-- 解决懒加载关闭session问题 -->
      <filter>
    <filter-name>openSessionInView</filter-name>
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    <param-name>sessionFactoryBeanName</param-name>
    <param-value>sessionFactory</param-value>
    </init-param>
    </filter>