异常信息:
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); }
版权声明:本文为博主原创文章,未经博主允许不得转载。