Hibernate更新数据报错:a different object with the same identifier value was already associated with the se...

使用hibernate更新数据时,报错

 Struts has detected an unhandled exception:

           Messages:    
           a different object with the same identifier value was already associated with the session: [com.elec.domain.ElecCommonMsg#297e35035c28c368015c28c3e6780001]
           a different object with the same identifier value was already associated with the session: [com.elec.domain.ElecCommonMsg#297e35035c28c368015c28c3e6780001];
           nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 
           [com.elec.domain.ElecCommonMsg#297e35035c28c368015c28c3e6780001]

代码如下:

/**
     * @Name  saveElecCommonMsg
     * @Description: 保存运行监控表的数据
     * @author kj
     * @version: V1.00
     * @create Date: 2017-05-21
     * @Parameters: saveElecCommonMsg:VO对象 
     * @return 无
     * 此处需要保存或者更新,要加上事务
     */
    @Override
    @Transactional(readOnly=false)
    public void saveElecCommonMsg(ElecCommonMsg elecCommonMsg) {
//        1.查询数据库运行监控表的数据,返回List,用来判断数据是否存在
        List<ElecCommonMsg> list = elecCommonMsgDao.findCollectionByConditionNoPage("", null, null);
        //存在就更新
        if(list != null && list.size() > 0 ){
       
            ElecCommonMsg cmg = list.get(0);
            elecCommonMsg.setComID(cmg.getComID());
            elecCommonMsg.setCreateDate(new Date());
            elecCommonMsgDao.update(elecCommonMsg);
            }
        }

原因是:使用update更新(Session中不允许出现2个相同的OID),所以此处改用 使用快照进行更新

 

/**
     * @Name  saveElecCommonMsg
     * @Description: 保存运行监控表的数据
     * @author kj
     * @version: V1.00
     * @create Date: 2017-05-21
     * @Parameters: saveElecCommonMsg:VO对象 
     * @return 无
     * 此处需要保存或者更新,要加上事务
     */
    @Override
    @Transactional(readOnly=false)
    public void saveElecCommonMsg(ElecCommonMsg elecCommonMsg) {
//        1.查询数据库运行监控表的数据,返回List,用来判断数据是否存在
        List<ElecCommonMsg> list = elecCommonMsgDao.findCollectionByConditionNoPage("", null, null);
        //存在就更新
        if(list != null && list.size() > 0 ){
            ElecCommonMsg ecg = list.get(0);
            ecg.setStationRun(elecCommonMsg.getStationRun());
            ecg.setDevRun(elecCommonMsg.getDevRun());
            ecg.setCreateDate(new Date());

          }else{//否则就保存
                elecCommonMsg.setCreateDate(new Date());
                 elecCommonMsgDao.save(elecCommonMsg);
           }
       }

 

转载于:https://www.cnblogs.com/taiguyiba/p/6884356.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值