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

