欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JPA merge聯(lián)合唯一索引無效問題解決方案

 更新時(shí)間:2020年09月19日 09:53:01   作者:賈樹丙  
這篇文章主要介紹了JPA merge聯(lián)合唯一索引無效問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

問題

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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java動(dòng)態(tài)規(guī)劃方式解決不同的二叉搜索樹

    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
  • YGC前后新生代是否變大分析詳解

    YGC前后新生代是否變大分析詳解

    要解釋這個(gè)問題,我們先要弄清楚YGC的過程,parNew是新生代的gc算法,簡單來說從gc roots開始掃描對(duì)象,當(dāng)掃到一個(gè)只要是屬于新生代的對(duì)象就將其挪到to space,但是老的對(duì)象還不會(huì)做釋放,直到gc完成之后再看是否釋放老的對(duì)象
    2022-01-01
  • 使用Filter過濾器中訪問getSession()要轉(zhuǎn)化

    使用Filter過濾器中訪問getSession()要轉(zhuǎn)化

    這篇文章主要介紹了使用Filter過濾器中訪問getSession()要轉(zhuǎn)化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 總結(jié)Java常用到的六個(gè)加密技術(shù)和代碼

    總結(jié)Java常用到的六個(gè)加密技術(shù)和代碼

    大家要記住現(xiàn)代密碼學(xué)最重要的原則柯克霍夫原則:數(shù)據(jù)的安全基于密鑰而不是算法的保密。也就是說即使密碼系統(tǒng)的任何細(xì)節(jié)已為人悉知,只要密匙未洩漏,它也應(yīng)是安全的。這篇文章給大家介紹了6個(gè)常用的加密技術(shù)和代碼。
    2016-07-07
  • JVM的垃圾回收機(jī)制真是通俗易懂

    JVM的垃圾回收機(jī)制真是通俗易懂

    這篇文章主要為大家詳細(xì)介紹了JVM的垃圾回收機(jī)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java的反射機(jī)制之獲取class詳解

    Java的反射機(jī)制之獲取class詳解

    這篇文章主要介紹了Java的反射機(jī)制之獲取class詳解,Class類表示一個(gè)類或接口的元數(shù)據(jù),通過它可以獲取到類或接口的構(gòu)造函數(shù)、方法、字段、注解等信息,也能夠創(chuàng)建對(duì)象、調(diào)用方法等,需要的朋友可以參考下
    2023-09-09
  • 解決打開的idea項(xiàng)目maven不生效問題

    解決打開的idea項(xiàng)目maven不生效問題

    這篇文章主要給大家介紹了關(guān)于如何解決打開的idea項(xiàng)目maven不生效問題,最近在配置maven時(shí),發(fā)現(xiàn)無論配置幾遍,IDEA中的maven配置總會(huì)還原成默認(rèn)的,所以這里給大家分享下解決辦法,需要的朋友可以參考下
    2023-07-07
  • 解決nacos項(xiàng)目啟動(dòng)報(bào)錯(cuò):Connection refused: no further informa問題

    解決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
  • Spring Boot啟動(dòng)過程全面解析(三)

    Spring Boot啟動(dòng)過程全面解析(三)

    這篇文章主要介紹了Spring Boot啟動(dòng)過程全面解析(三)的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 如何修改HttpServletRequest中header中的信息

    如何修改HttpServletRequest中header中的信息

    這篇文章主要介紹了如何修改HttpServletRequest中header中的信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02

最新評(píng)論