JPA merge联合唯一索引无效的解决方法?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
问题
JPA的merge()操作 是合并的意思,就是当保存的实体时,根据主键id划分,如果已存在,那么就是更新操作,如果不存在,就是新增操作
但是这个仅针对 主键id 划分,对联合唯一索引 无效,两次更新同一条语句还是会报错:
Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1-1' for key 'UK_bing'
解决
有个简单的办法,就是先判断是否有这条数据,然后再决定是更新、还是增加,如下:
@Override public void mergeCollection(Collection collection) { String hql = "select count(1) from Collection where userId = ?1 and topicId =?2"; Query query = em.createQuery(hql) .setParameter(1, collection.getUserId()) .setParameter(2, collection.getTopicId()); Long num = (Long) query.getSingleResult(); if (num > 0) { String hql2 = "update Collection set status = ?3 where userId = ?1 and topicId =?2"; Query query2 = em.createQuery(hql2) .setParameter(1, collection.getUserId()) .setParameter(2, collection.getTopicId()) .setParameter(3, collection.getStatus()); query2.executeUpdate(); } else { em.merge(collection); } }
看完上述内容,你们掌握JPA merge联合唯一索引无效的解决方法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。