Hibernate更新多对一关联的多表时,一这方的关联信息丢失了!!贴下代码:
public class Check {
        private Integer id;

private String check_sn;  

private String check_next; 

private Date check_time;  

private String check_result;

private String check_comment; 

private Account account;  //一这方

private Employee employee;

.......
}

Hibernate.xml 文件是:
       
               ....      <many-to-one name="account" class="net.model.Account" lazy="false">
       
          <column name="account_id"></column>
        </many-to-one>
         
         
         <many-to-one name="employee" class="net.model.Employee" lazy="false">
       
          <column name="employee_id"></column>
        </many-to-one> 


jsp 页面是:         <form action="updateCheck.action" method="post">
     <input type="hidden" name="check.id" value="${check.id}"/><br/>
     
   当前审核人:   <input type="text" name="check.check_sn" value="${check.check_sn}"/><br/>    下一个审核人:  <input type="text" name="check.check_next" value="${check.check_next}"/><br/>    审核时间: <input type="text" name="check.check_time" value="${check.check_time}"/><br/>     审核结果: <input type="text" name="check.check_result" value="${check.check_result}"/><br/>    审核意见: <input type="text" name="check.check_comment" value="${check.check_comment}"/><br/>

 <input type="submit" value="审核结束"/>
</form>


           action頁面是:
         
        private Check check;

private Employee employee;

private Account account;

private CheckService checkService;


      public String updateCheck(){


checkService.updateCheck(check);


return SUCCESS;
}

   在debug里面看从jsp页面跳转到action时候,account 和employee 都是null 了。。
  一更新那两个属性都为空了。
   
怎么会丢失?那里出错了。
我用junit测试更新没问题的。。
求高手解答...
拜谢!!!

解决方案 »

  1.   

    在Struts2的Action中的业务方法中有如下代码:
    public String updateCheck(){
      checkService.updateCheck(check);//这里有问题.
      return SUCCESS;
    }更新一个对象之前必须要求对象是"持久化"状态.要求它必须在数据库表中存在,并且在Hibernate的缓存中也存在,方法是先find()一下这个对象.
    解决方法:
    在Action中加入
    Check tmpCheck = checkService.findCheckByID(check.getId());
    tmpCheck.setCheck_sn(check.GetCheck_sn());
    tmpCheck.setCheck_next(check.GetCheck_next());
    ....
    ...
    checkService.updateCheck(tmpCheck);希望对你有帮助.
      

  2.   


    试过了,不是这里的问题。。
     我用debug测试了,是从jsp页面跳到我的action 我里面带的两个关联表  employee和account就为null 了
      用另一个来找也不行!
      

  3.   

    o. 解决了,就是1楼指出的错误。
    一开始没调试出来
    过一会就OK了。
     thank you !