JPA merge联合唯一索引无效问题解决方案

网友投稿 495 2022-11-21


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);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:jenkins+Maven从SVN上构建项目的方法
下一篇:解决mac最新版intellij idea崩溃闪退crash的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~