jdbc与hibernate结合修改子表数据(jdbc删除、hibernate更新/添加)

/**
  * 功能说明:归档合同:保存修改的数据和合同状态为:合同已归档,同时产生批号进入计划阶段
  * @param requestevent
  * @return
  * @throws CoreBusinessProcessException
  * ResponseEvent
  * 修改人:
  * 修改日期:
  */
 public ResponseEvent GdHt(RequestEvent requestevent)
 throws CoreBusinessProcessException {
  HashMap hashMap = (HashMap) requestevent.getObject();
  THtHtForm htform = (THtHtForm) hashMap.get("HTFORM");
  THtHtkzb kzCus = htform.getKzCus();
  THtHtxxbVO htxxbvo = htform.getHtxxbvo();
  THtHtxxb htxxb = new THtHtxxb();
  htxxb = (THtHtxxb)this.ihibernatedao.findByPk(htxxb.getClass().getName(), htxxbvo.getHtDm());
  htxxb.setBz(htxxbvo.getBz());
  htxxb.setYf(htxxbvo.getYf());
  htxxb.setYsFs(htxxbvo.getYsFs());
  htxxb.setDd(htxxbvo.getDd());
  htxxb.setZlBz(htxxbvo.getZlBz());
  htxxb.setBzYq(htxxbvo.getBzYq());
  htxxb.setWyZr(htxxbvo.getWyZr());
  htxxb.setTdTk(htxxbvo.getTdTk());
  //htxxb.setDz(htxxbvo.getDz());
  this.ihibernatedao.update(htxxb);
  /更新合同明细信息///
  List htmxList = htform.getHtmxxxvoes();
  Set htmxSet = htxxb.getTHtHtmxxxes();
  Iterator it = htmxSet.iterator();
  int i = 0;
  
  while(it.hasNext()){
   THtHtmxxx tmphtmx = (THtHtmxxx)it.next();
   THtHtmxxxVO tmphtmxvo = (THtHtmxxxVO)htmxList.get(i++);
   //更新明细信息
   tmphtmx.setSl(tmphtmxvo.getSl());//数量
   tmphtmx.setDj(tmphtmxvo.getDj());//单价
   tmphtmx.setZj(tmphtmxvo.getZj());//总价
   //更新交货期信息
//   tmphtmxvo.getj
   //删除此明细的交货期
   Connection conn = this.idao.getJdbsConn();
   SequenceNumCreator.sctx = this.sctx;
   

//jdbc删除
  
 String delSql = "delete from T_HT_HTJHQ where HTMXXX_DM='"+tmphtmx.getHtmxxxDm()+"'";
   this.idao.execute(delSql);
   Set jhqSet = new HashSet() ;----新
创建一个字表记录的集合jhqSet
   
   for(int j=0; j<4; j++){
    THtHtjhqVO htjhqvo = tmphtmxvo.getJhqvo(j);
    if(!StringUtil.commonCovert(htjhqvo.getStrJhq()).equals("")){
     THtHtjhq jhq  = new THtHtjhq();
//      交货期代码
     String htjhqdm = (String) SequenceNumCreator
       .getSequenceNum("T_KH_LINKMAN_SEQUENCE", conn);

     jhq.setJhxxDm(htjhqdm);

     jhq.setHtmxxxDm(tmphtmx.getHtmxxxDm());// 设置参照主键
     jhq.setSl(htjhqvo.getSl());
     jhq.setJhq(DataTypeUtil.stringToDate(htjhqvo
       .getStrJhq()));
     jhq.setPc(htjhqvo.getPc());
     jhqSet.add(jhq);
    }
   }
   
tmphtmx.setTHtHtjhqs(jhqSet);-----将子表集合添加到主表的集合属性中
   this.ihibernatedao.update(tmphtmx);//更新明细 ----更新主表和子表数据

原理总结说明:hibernate会自动监测内存中字表数据的改变,当调用update方法时,hibernate根据主键将内存中的数据与数据库中的记录比对,如果数据库中没有的主键则插入新纪录,如果有相同主键则更新记录。---

注:大体是这个过程,但具体的原理还要参考hibernate的专业书籍。!!!!!!!
  }
  
  //更新客户信息
  THtHtkzb tmpkz = new THtHtkzb();
  tmpkz = (THtHtkzb)this.ihibernatedao.findByPk(tmpkz.getClass().getName(), htxxb.getHtDm());
  try {
   UtilBuilder.BuilderBean(tmpkz, kzCus);
   tmpkz.setHtDm(htxxb.getHtDm());
  } catch (BusinessProcessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  this.ihibernatedao.update(tmpkz);//更新客户信息
  
  Long nowhtzt = htform.getNowhtzt();
  hashMap.put("HTZT",nowhtzt.toString());
  return this.HtQueryByStatus(requestevent);
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值