好像有个spring框架集成的opensessionview类?

解决方案 »

  1.   

    不知楼主在action中是否会操作session?看楼主的意思应该是分开的。一般而言,业务层应该与控制层分离,像楼主采用struts+hibernate情况下,业务层应该写成一些beans或直接放在DAO中。而这些业务方法调用完毕后应该自动关闭session。这样不会产生你说的“存储时报错,说有两个session连接在同一个数据集上”这种情况。对于关联的延时加载策略,一般是采用lazy=true,如果你想加载A则在方法内访问一次A对象(如getA.iterator)。至于对象C的保存,是不需要有对象A及B的,只需要他们的外键即可。如:
    C c = new C();
    c.setAId(a.getId());
    c.setBId(b.getId());
    cDAO.save(c);另外如果Session采用get或find方法,不管lazy的设置如何都会采用立即检索的策略。
      

  2.   

    在dao类中的增加,删除,修改方法中只打开transaction和session,但是都不关闭,写一个过滤器,提交一个请求以后再关闭transaction和session.
      

  3.   

    在关联的HBM中多对一那里要加上outer-join属性
    <many-to-one
                       name="userpo"
               column="USER_ID"
               class="com.callcenter.ccpo.db_register.RegUserPO"
                       cascade="none"
               update="false"
               insert="false"
                       outer-join="true"
                     />
      

  4.   

    ][/color]fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]fffffffffffffffffffffffffffffff[colfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff=14px][/size]fffffffffffffffffffffffffffffff[/sizexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr=#00FFFF][/color]ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff[size=14px]hffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffor=#00FFFF][/color]fffffffffffffffffffffffffffffffhffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
      

  5.   

    不知楼主在action中是否会操作session?看楼主的意思应该是分开的。 一般而言,业务层应该与控制层分离,像楼主采用struts+hibernate情况下,业务层应该写成一些beans或直接放在DAO中。而这些业务方法调用完毕后应该自动关闭session。这样不会产生你说的“存储时报错,说有两个session连接在同一个数据集上”这种情况。 对于关联的延时加载策略,一般是采用lazy=true,如果你想加载A则在方法内访问一次A对象(如getA.iterator)。 至于对象C的保存,是不需要有对象A及B的,只需要他们的外键即可。如: 
    C   c   =   new   C(); 
    c.setAId(a.getId()); 
    c.setBId(b.getId()); 
    cDAO.save(c); 另外如果Session采用get或find方法,不管lazy的设置如何都会采用立即检索的策略。
    -----------------------------------------------------------------------------------------
    在关联的HBM中多对一那里要加上outer-join属性 
    <many-to-one 
                                          name= "userpo " 
                          column= "USER_ID " 
                          class= "com.callcenter.ccpo.db_register.RegUserPO " 
                                          cascade= "none " 
                          update= "false " 
                          insert= "false " 
                                          outer-join= "true " 
                                      / >
    -----------------------------------------------------------------------------------------
    我的个人看法,你的表的关联关系太多,导致错误。应该从关联关系,找突破。至少不能从A-B,寻求突破!
      

  6.   

    2个session不能连同一个数据集么?
    据我所知应该是同一个数据的2个实利不能和同一个session关联的吧。如果你要加载的对象可能不是那么多的话,就别延迟加载了,立即加载也不错。
    延迟加载只是和查询有关系的,你这里保存的问题不关延迟加载的事C.setA(a);  //session里有a了,但你知道a是有属性b的,那么在session里面有b了
    C.setB(b);   //session里再次有b ,出现一个数据的2个实例和同一个session关联
    save(c) 解决的办法是想办法保存 a或b ,让 a或b来级连保存。