Hibernate更新数据报错:a different object with the same identifier value was already associated with the se
Posted panzer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
}
}
以上是关于Hibernate更新数据报错:a different object with the same identifier value was already associated with the se的主要内容,如果未能解决你的问题,请参考以下文章
使用hibernate.get()取得对象再set()属性后调用update()更新对象时一直不能写入到数据库,是啥原因?
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was alread
hibernate中一种导致a different object with the same identifier value was already associated with the sess
org.hibernate.NonUniqueObjectException:a different object with the same identifier value was alread(
a different object with the same identifier value was already associat