JPA merge聯(lián)合唯一索引無效問題解決方案
問題
JPA的merge()操作 是合并的意思,就是當(dāng)保存的實(shí)體時(shí),根據(jù)主鍵id劃分,如果已存在,那么就是更新操作,如果不存在,就是新增操作
但是這個(gè)僅針對(duì) 主鍵id 劃分,對(duì)聯(lián)合唯一索引 無效,兩次更新同一條語句還是會(huì)報(bào)錯(cuò):
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'
解決
有個(gè)簡單的辦法,就是先判斷是否有這條數(shù)據(jù),然后再?zèng)Q定是更新、還是增加,如下:
@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); } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- DataFrame 數(shù)據(jù)合并實(shí)現(xiàn)(merge,join,concat)
- 關(guān)于keras中keras.layers.merge的用法說明
- 淺談keras中的Merge層(實(shí)現(xiàn)層的相加、相減、相乘實(shí)例)
- C++實(shí)現(xiàn)歸并排序(MergeSort)
- 源碼解析JDK 1.8 中的 Map.merge()
- 詳解Python3 pandas.merge用法
- 詳解PANDAS 數(shù)據(jù)合并與重塑(join/merge篇)
- pandas dataframe的合并實(shí)現(xiàn)(append, merge, concat)
- CentOS7.4開機(jī)出現(xiàn)welcome to emergency mode的解決方法
相關(guān)文章
Java動(dòng)態(tài)規(guī)劃方式解決不同的二叉搜索樹
二叉搜索樹作為一個(gè)經(jīng)典的數(shù)據(jù)結(jié)構(gòu),具有鏈表的快速插入與刪除的特點(diǎn),同時(shí)查詢效率也很優(yōu)秀,所以應(yīng)用十分廣泛。本文將詳細(xì)講講二叉搜索樹的原理與實(shí)現(xiàn),需要的可以參考一下2022-10-10使用Filter過濾器中訪問getSession()要轉(zhuǎn)化
這篇文章主要介紹了使用Filter過濾器中訪問getSession()要轉(zhuǎn)化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01總結(jié)Java常用到的六個(gè)加密技術(shù)和代碼
大家要記住現(xiàn)代密碼學(xué)最重要的原則柯克霍夫原則:數(shù)據(jù)的安全基于密鑰而不是算法的保密。也就是說即使密碼系統(tǒng)的任何細(xì)節(jié)已為人悉知,只要密匙未洩漏,它也應(yīng)是安全的。這篇文章給大家介紹了6個(gè)常用的加密技術(shù)和代碼。2016-07-07解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further&
這篇文章主要介紹了解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further informa問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04如何修改HttpServletRequest中header中的信息
這篇文章主要介紹了如何修改HttpServletRequest中header中的信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02