问题

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

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java 唯一索引冲突_JPA merge联合唯一索引无效问题解决方案相关推荐

  1. mongo 唯一约束索引_Java:MySQL 基础知识+索引相关

    阅读本文前,请您先点击上面的蓝色字体,再点击"关注",这样您就可以继续免费收到最新文章了.每天都有分享.完全是免费订阅,请放心关注.注:本文转载自网络,不代表本平台立场,仅供读者参 ...

  2. 建立索引和主外约束_Mysql索引原理

    阅读文本大概需要3分钟. 作者:菜菜聊架构来源:https://www.cnblogs.com/caicz/p/11009507.html 一.为什么要有索引 索引在MySQL中也叫做"键& ...

  3. mybatis insert 忽略 联合唯一索引_MySQL实战中,Insert语句的使用心得总结

    提到MySQL的Insert语句,你肯定不陌生,或许已经张口就来:不就是insert into table values(xxx,xxx,xxx)嘛!没错,但在实战中,根据不同的需求场景,插入操作在语 ...

  4. mysql使用联合唯一索引会影响查询效率吗_想进大厂,这些Mysql索引底层知识你是必须知道的。...

    前言 上一篇总结了Mysql的锁机制,通过读者的反映和阅读量显示,总体还是不错的,感兴趣的可以阅读一下[]. 写了那么多的Mysql文章,有读者问我是不是dba,工作真的需要掌握那么深吗.我想说的是: ...

  5. mysql 索引冲突_mysql唯一索引已有键值冲突解决办法

    建唯一索引: alter ignore table tmp_qw2 add unique key uk_uid(user_id); IGNORE is a MySQL extension to sta ...

  6. mysql创建联合唯一索引

    如果test表中的a字段和b字段的值可以重复,但是他们组合在一起不可以重复的话,可以将为这两个字段添加联合唯一索引 ALTER TABLE `test` ADD UNIQUE INDEX `pdas_ ...

  7. mysql联合唯一索引可以有多个吗_mysql可以设置联合唯一索引吗?

    mysql可以设置联合唯一索引,方法:使用"Alter table 表名 add UNIQUE index 索引名 (字段1,字段2)"语句来设置,它会删除重复的记录,保留一条,然 ...

  8. 索引,主键,唯一索引,联合索引的区别

    https://blog.csdn.net/qq_33275924/article/details/80220797 https://www.cnblogs.com/ymj0906/p/4240856 ...

  9. [SQLAlchemy] 创建: 主键/索引/唯一约束/联合唯一约束/联合主键约束

    1. 主键 from sqlalchemy import *test = Table('test', metadata,Column('id', BigInteger, primary_key=Tru ...

最新文章

  1. 【KVM系列03】KVM的I/O 全虚拟化和准虚拟化
  2. SpringBoot集成OpenOffice实现doc文档转html
  3. Kotlin实战指南十七:JvmField、JvmStatic使用
  4. 异常检测1——python使用KNN模型进行异常检测
  5. 支持vxlan的服务器网卡,3台服务器互通vxlan
  6. eclipse 中设置注释模板
  7. linux(Centos5.1)升级至2.6.19内核+L7实现-- 续限P2P软件
  8. 微信小程序自定义下拉刷新
  9. python:实现培根密码算法(附完整源码)
  10. icon 的css,【iview】icon样式
  11. 消元法解二元一次方程组c语言,消元法解二元一次方程组的概念、步骤与方法...
  12. java编写时间流逝_JAVA日期时间类如何使用
  13. psycopg2 : cursor already closed
  14. react —— 解决报错之 Objects are not valid as a React child (found: [object HTMLDivElement]). If you meant
  15. IT信息考证人,证书记得要延续 ITSS CISAW CISP PMP CISSP 证书延续 有效期
  16. php上传图片并预览
  17. UMLChina建模竞赛题大全-题目全文+分卷自测(10套100题)
  18. dbo.GetJsonValue函数
  19. 零撸项目-Star Network注册流程
  20. 史上最全SQL基础知识总结

热门文章

  1. 在Windows下如何安装Tomcat服务器搭建
  2. Java嵌入oracle,Java插入Oracle Spatial空间数据
  3. oracle连接满报错日志,Oracle归档日志满了导致Oracle连接(ORA-00257)报错处理
  4. 【APICloud系列|24】 MNNavigationMenu模块(导航菜单)的实现
  5. 教你玩转CSS 属性选择器
  6. github哪些协议能商用_GitHub 上有哪些一般人也可以用的项目?
  7. 面试整理(1):原生ajax
  8. 如何隐藏 video 元素的下载按钮
  9. perl 用网易发邮件报错 554 DT:SPM 163 smtp14
  10. Win10 系统直接在目录下打开cmd