//发布公告时,有用户信息,修改公告没有传入用户信息
public BaseOutVO addOrUpdateNotice(NoticeVo vo, UserInfo userInfo) {
BaseOutVO baseOutVO = new BaseOutVO();
Notice notice = new Notice();
notice.setTitle(vo.getTitle());
notice.setContent(vo.getContent());
notice.setStartTime(UtilTime.StringToDate(vo.getStartTime(),"yyyy-MM-dd HH:mm:ss"));
notice.setEndTime(UtilTime.StringToDate(vo.getEndTime(),"yyyy-MM-dd HH:mm:ss"));
//发布公告时,有用户信息,修改公告没有传入用户信息
if(userInfo !=null){
notice.setCreateTime(UtilTime.StringToDate(UtilTime.getCurrentTime(),"yyyy-MM-dd HH:mm:ss"));
notice.setCreater(userInfo.getUniqueId());
baseOutVO.setMessage("发布成功");
}
if(userInfo !=null){
notice.setCreateTime(UtilTime.StringToDate(UtilTime.getCurrentTime(),"yyyy-MM-dd HH:mm:ss"));
notice.setCreater(userInfo.getUniqueId());
baseOutVO.setMessage("发布成功");
}else {
//根据公告id查询出之前的公告,将createrid取出,放入要修改的公告对象里
Notice former = noticeDao.get(Notice.class, vo.getUniqueId());
notice.setCreater(former.getCreater());
notice.setUniqueId(vo.getUniqueId());
baseOutVO.setMessage("修改成功");
}
noticeDao.saveOrUpdate(notice);
baseOutVO.setResult(true);
return baseOutVO;
}
错误的意思就是:在hibernate中同一个session里面有了两个相同标识但是是不同实体。
错误原因在于 调用hibernate的get方法取出对象,而调用saveOrupdate保存的对象是另一个,导致session里面有了两个相同标识但是是不同实体。
解决办法是:
public BaseOutVO addOrUpdateNotice(NoticeVo vo, UserInfo userInfo) {
BaseOutVO baseOutVO = new BaseOutVO();
Notice notice = new Notice();
//发布公告时,有用户信息,修改公告没有传入用户信息
if(userInfo !=null){
notice.setCreateTime(UtilTime.StringToDate(UtilTime.getCurrentTime(),"yyyy-MM-dd HH:mm:ss"));
notice.setCreater(userInfo.getUniqueId());
baseOutVO.setMessage("发布成功");
}else {
notice = noticeDao.get(Notice.class, vo.getUniqueId());
baseOutVO.setMessage("修改成功");
}
notice.setTitle(vo.getTitle());
notice.setContent(vo.getContent());
notice.setStartTime(UtilTime.StringToDate(vo.getStartTime(),"yyyy-MM-dd HH:mm:ss"));
notice.setEndTime(UtilTime.StringToDate(vo.getEndTime(),"yyyy-MM-dd HH:mm:ss"));
noticeDao.saveOrUpdate(notice);
baseOutVO.setResult(true);
return baseOutVO;
}
把信息封装到从get方法取出来的对象里,保存这个取出的对象。这样的话同一个session里的对象标识只有一个实体(可能有其他解决办法)
参考的博客:https://blog.youkuaiyun.com/u012230055/article/details/40423903
https://blog.youkuaiyun.com/forsipphone/article/details/53838265