Hibernate:a different object with the same identifier value was already associated wit异常解决

今天在用框架更新时发现报a different object with the same identifier value was already associated wit此异常
英文水平比较差..大致也了解说我1个对象里有不同的标示符值
上网找了下解决方案...
原因:因为之前已经将该条记录取到了session缓存中,用update(游离态对象)方法时发生错误,一个游离态对象和一个持久态对象,具有相同OID,因此报错。

解决办法用merge(游离态对象),该方法应该是根据游离态对象的OID,执行select语句,将游离态对象转成了持久化对象,之后update()
但是我用的是别人的框架持久化层是不能随便修改的..尽量避免去修改内部的定义的接口..
想了想 是不是自己在action里查了一遍 然后Hibernate:session里就存在了游离对象,那么最后有拿这个对象更新的话就出错。
然后我用根据传入的对象ID 查出来赋给另一个对象然后 交替属性后 更新新的对象 竟然就可以了..
原理不是很懂..但反正是解决了..忽忽

hibernate2.17中使用insertOrUpdate()方法 
hibernate3.0以上使用merge()来合并两个session中的同一对象

 


ContractedBlock.gif ExpandedBlockStart.gif Code
        public ActionForward toEdit(ActionMapping mapping,ActionForm form,
            HttpServletRequest request,HttpServletResponse response){        
        SalChanceForm myForm
=(SalChanceForm)form;
        String id
=request.getParameter("id");
        SalChance salChance
=(SalChance)this.salChanceBiz.getCommonDAO().get(SalChance.class, Long.parseLong(id));
        myForm.setItem(salChance);
        
        
return mapping.findForward("edit");
    }
    
    
public ActionForward doEdit(ActionMapping mapping,ActionForm form,
            HttpServletRequest request,HttpServletResponse response){        
        SalChanceForm myForm
=(SalChanceForm)form;
        SalChance chance
=(SalChance)this.salChanceBiz.getCommonDAO().get(SalChance.class, myForm.getItem().getChcId());
        chance.setChcCustName(myForm.getItem().getChcCustName());
    
        
this.salChanceBiz.update(chance);
        SalChance salChance
=new SalChance();
        salChance.setChcId(myForm.getItem().getChcId());
        
        
this.salChanceBiz.getList(salChance, myForm.getPageResult());
        request.setAttribute(
"edit","修改成功!");
        
return mapping.findForward("list");
    }

转载于:https://www.cnblogs.com/79039535/archive/2009/09/11/1564457.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值