异常信息:
org.hibernate.NonUniqueObjectException
发生原因:
在对一个实体查询操作后,进行了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);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
本文详细介绍了在使用Hibernate框架进行实体操作时遇到NonUniqueObjectException错误的原因及解决方案,重点在于避免在对实体进行查询操作后直接进行修改并再次保存的情况。通过使用merge()方法替代save()方法,可以有效解决此问题。
8万+

被折叠的 条评论
为什么被折叠?



