异常信息:
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()或update()方法。

11万+

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



