a different object with the same identifier value was already associated withthe session异常解决方案

异常信息:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated withthe session

发生原因:

在对一个实体查询操作后,进行了set,然后又要对这个实体进行save/update,

报错的例子

//Service层
public void modifyPersonalizedSettings(PersonalizedSettings ps,Integer userId)throws Exception {
		
		User user = personalizedSettingsDAO.selectUserById(userId);
		ps.setUser(user);
		personalizedSettingsDAO.updatePersonalizedSettings(ps);
	}
//DAO层
public void updatePersonalizedSettings(PersonalizedSettings ps) throws Exception {
System.out.println(ps+"DAO");
template.merge(ps);
}

解决方案:

最简单的就是不用save()方法,改用merge()方法。

例子:

//Service层
public void modifyPersonalizedSettings(PersonalizedSettings ps,Integer userId)throws Exception {
		
		User user = personalizedSettingsDAO.selectUserById(userId);
		ps.setUser(user);
		personalizedSettingsDAO.updatePersonalizedSettings(ps);
	}
//DAO层
public void updatePersonalizedSettings(PersonalizedSettings ps) throws Exception {
System.out.println(ps+"DAO");
//template.update(ps)不再使用update()方法,改用merge()方法即可
template.merge(ps);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-11-27 14:35  codingcloud  阅读(496)  评论(0)    收藏  举报
编辑推荐:
· WPF 引用 ASP.NET Core 的 AOT 版本
· 通过 Canvas 将后端发来的一帧帧图片渲染成“视频”的实现过程
· 当加密ID需要变成Guid:为什么我选择了AES-CBC而非GCM?
· 基于 epoll 的协程调度器——零基础深入浅出 C++20 协程
· 下划线字段在golang结构体中的应用
阅读排行:
· 我的AI自学路线,可能对你有用
· WPF 引用 ASP.NET Core 的 AOT 版本
· 纯 C#实现+AOT 打造的智能PDF目录提取工具 PdfTocExtractor
· C# 13 与 .NET 9 跨平台开发实战(第一章:开发环境搭建与.NET概述-下篇)
· 深入理解 C# 异步编程:同步、Task.Wait () 与 await 的本质区别及实践指南
点击右上角即可分享
微信分享提示