解決mybatis generator MySQL自增ID出現(xiàn)重復(fù)問題MySQLIntegrityConstraintViolationException
mybatis generator MySQL自增ID出現(xiàn)重復(fù)問題
PS:有時候不注意可能導(dǎo)致該問題,此處只做記錄,以供參考。
代碼說明:
數(shù)據(jù)庫是MySQL,用generator 生成的mapper.xml中的代碼,自增ID,使用的是selectKey來獲取。
問題描述
insert的時候,添加的時候,第一條數(shù)據(jù)添加成功,接著添加第二條數(shù)據(jù)的時候會提示失敗,失敗的原因是ID還是使用的上一個ID值,主鍵重復(fù)導(dǎo)致插入失敗。
異常如下:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '4' for key 'PRIMARY'
問題原因
BEFORE還是AFTER的問題
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey>
需要注意的是
Oracle使用before,MySQL使用after
生成帶代碼的時候可以通過identity="true"來指定生成的selectKey是before還是after
<generatedKey column="id" sqlStatement="Mysql" identity="true" />
注:
使用 useGeneratedKeys="true" keyProperty="id" 不存在該問題。
mybatis generator生成實體時出現(xiàn)重復(fù)
java項目 中使用 org.mybatis.generator生成mysql數(shù)據(jù)庫實體時,由于mysql 數(shù)據(jù)庫中存在多個庫,如果庫中出現(xiàn)重復(fù)表時,會出現(xiàn)生成的實體代碼出現(xiàn)重復(fù)問題,原因是數(shù)據(jù)庫生成實體時會掃描所有的庫,
解決方法
1、第一種
jdbc:mysql://localhost:3306/table?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&nullCatalogMeansCurrent=true
在連接串中加入nullCatalogMeansCurrent=true就行了
2、第二種方式是設(shè)置
<table tableName="table" catalog="dataName"></table>
使用catalog指定庫名
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- 解決Mybatis報錯:org.apache.ibatis.reflection.ReflectionException: There is no getter for property named問題
- MyBatis嵌套查詢collection報錯:org.apache.ibatis.exceptions.TooManyResultsException
- 解決springboot3:mybatis-plus依賴錯誤:org.springframework.beans.factory.UnsatisfiedDependencyException
- 解決Mybatis出現(xiàn)報錯Error querying database.Cause: java.lang.IndexOutOfBoundsException: Index 9 out of
- 解決mybatis plus報錯com.microsoft.sqlserver.jdbc.SQLServerException:必須執(zhí)行該語句才能獲得結(jié)果
- 關(guān)于MyBatisSystemException異常產(chǎn)生的原因及解決過程
相關(guān)文章
SpringBoot配置mybatis駝峰命名規(guī)則自動轉(zhuǎn)換的實現(xiàn)
這篇文章主要介紹了SpringBoot配置mybatis駝峰命名規(guī)則自動轉(zhuǎn)換的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java 調(diào)用天氣Webservice詳解及實例代碼
這篇文章主要介紹了Java 調(diào)用天氣Webservice詳解及實例代碼的相關(guān)資料,這里附實例代碼,使用java 調(diào)用webservice 的小應(yīng)用,需要的朋友可以參考下2016-11-11利用Spring Social輕松搞定微信授權(quán)登錄的方法示例
這篇文章主要介紹了利用Spring Social輕松搞定微信授權(quán)登錄的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12MyBatis中關(guān)于resultType和resultMap的區(qū)別介紹
MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap,那么MyBatis中關(guān)于resultType和resultMap的區(qū)別是什么呢?下面小編通過本文給大家解答下2016-09-09解決SpringBoot中MultipartResolver和ServletFileUpload的沖突問題
這篇文章主要介紹了解決SpringBoot中MultipartResolver和ServletFileUpload的沖突問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java實現(xiàn)在線五子棋對戰(zhàn)游戲(人機對戰(zhàn))
這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實現(xiàn)在線五子棋對戰(zhàn)游戲(人機對戰(zhàn)),文中的實現(xiàn)步驟講解詳細(xì),感興趣的可以嘗試一下2022-09-09