异常信息:
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);
}