这是运行结果
已经进入到while中!!!!!!!
09:08:43,890 ERROR LazyInitializationException:42 - failed to lazily initialize a collection of role: com.qqz.bean.Dept.emps, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.qqz.bean.Dept.emps, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:380)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:372)
at org.hibernate.collection.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:119)
at org.hibernate.collection.PersistentSet.isEmpty(PersistentSet.java:169)
at com.qqz.action.dept.ListDeptAction.execute(ListDeptAction.java:36)
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:452)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:284)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:322)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1714)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)dept类
public class Dept {
private int deptno;//对应部门表主键id

private String dname;//部门名称

private Set<Emp> emps=new HashSet();//对应部门的员工

        省略 set get 方法
   
private String location;//部门位置
}
雇员类
public class Emp {

private int empno;//员工号

private String ename;//员工名

private String job;//工作

private float sal;//薪水

private int deptno;//对应部门号--外键

private Dept dept;//对应部门
}

解决方案 »

  1.   

    hbm.xml文件如下
    <hibernate-mapping>
     <class name="com.qqz.bean.Dept"  table="dept">
     <id name="deptno"  column="deptno" type="int">
     <generator class="assigned"></generator </id>
       <property name="dname" column="dname" type="string"></property>
       <property name="location" column="loc" type="string"></property> <!-- 部门对应相应员工的一对多的关系 -->
     <set name="emps" cascade="all" inverse="true" lazy="true"  table="emp">
           <key column="deptno"></key> 
           <one-to-many class="com.qqz.bean.Emp"/>
     </set> 
     </class></hibernate-mapping>Emp.hbm.xml<hibernate-mapping>
     <class name="com.qqz.bean.Emp"  table="emp">
     <id name="empno"  column="empno" type="int">
     <generator class="assigned"></generator> 
    </id> 
     <property name="ename" column="ename" type="string"></property>
     <property name="job" column="job" type="string"></property>
     <property name="sal" column="sal" type="float"></property>
     
     <!-- 雇员与部门对应的多对一关系 -->
     <many-to-one name="dept" column="deptno" class="com.qqz.bean.Dept" lazy="false" ></many-to-one>
     
     
     </class></hibernate-mapping>
    applicationContext.xml 配置
       省略  dataSource        
              
              <bean id="sessionFactory" 
                     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
                  <property name="dataSource">
                      <ref local="dataSource"/>
                  </property>
              
                  <property name="mappingResources">
                      <list>  
                      <value>com/qqz/bean/Dept.hbm.xml</value>                              <value>com/qqz/bean/Emp.hbm.xml</value>
                      </list>
                  </property>
              
                  <property name="hibernateProperties">
                       <props>
                       <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect
                       </prop>
                       <prop key="hibernate.show_sql">true</prop>
                       </props>
                  </property> 
                        </bean>
              
              <bean id="deptDao" class="com.qqz.dao.impl.DeptDAOImpl" scope="singleton">     
                     <property name="sessionFactory">
                         <ref bean="sessionFactory"/>
                     </property>
              </bean>
              
             <bean id="empDao" class="com.qqz.dao.impl.EmpDAOImpl" scope="singleton">
                     <property name="sessionFactory">
                            <ref bean="sessionFactory"/>
                     </property>
             </bean>
              <bean id="deptService" class="com.qqz.service.impl.DeptServiceImpl" scope="singleton">
                     <property name="depdao" ref="deptDao"></property>
              </bean>
              
              <bean id="empService" class="com.qqz.service.impl.EmpServiceImpl" scope="singleton">
                     <property name="empdao" ref="empDao"></property>
              </bean>
              
              <bean id="listDeptAction" class="com.qqz.action.dept.ListDeptAction" scope="prototype">
                     <property name="service" ref="deptService"></property>
              </bean>
              
              
    </beans>        Action片段
    public String execute() throws Exception {
    // TODO Auto-generated method stub
    Map request=(Map)ActionContext.getContext().get("request");
    List<Dept> lists = service.findAllDept();
    Iterator itr  = lists.iterator();
    while(itr.hasNext()) {
    System.out.println("已经进入到while中!!!!!!!");
        Dept dp=(Dept)itr.next();
                if(dp.getEmps().isEmpty())
                {
                 System.out.println("************");
                 System.out.println("雇员为空");
                }
        System.out.println(dp.getDeptno());
    }

    System.out.println("********运行通过");
        
    request.put("list",this.service.findAllDept());
    return SUCCESS;
    }
    求大虾帮我 急急急!!!
      

  2.   

    在hibernate的映射关系中由于延迟加载,之前的操作使session已经关闭,所以加载set属性时无可用session 
    解决办法
    设置set的属性lazy="false" 
    不过为何
    进入到if语句中了  为什么没有取到附表的对象打印出已经进入到while中!!!!!!!
    10
    已经进入到while中!!!!!!!
    20
    已经进入到while中!!!!!!!
    30
    已经进入到while中!!!!!!!
    ************
    雇员为空
    40
    ********运行通过急呀 大哥们 帮我 刚接触SSH
      

  3.   

    lz要么已经关闭连接了,要么用了lazy