欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

解决mybatisgeneratorMySQL自增ID出现重复问题MySQLIntegrityConstraintViolationException,

来源: javaer 分享于  点击 9306 次 点评:131

解决mybatisgeneratorMySQL自增ID出现重复问题MySQLIntegrityConstraintViolationException,


目录
  • mybatis generator MySQL自增ID出现重复问题
    • 问题描述
    • 问题原因
    • 需要注意的是
  • mybatis generator生成实体时出现重复
    • 解决方法
  • 总结

    mybatis generator MySQL自增ID出现重复问题

    PS:有时候不注意可能导致该问题,此处只做记录,以供参考。

    代码说明:

    数据库是MySQL,用generator 生成的mapper.xml中的代码,自增ID,使用的是selectKey来获取。

    问题描述

    insert的时候,添加的时候,第一条数据添加成功,接着添加第二条数据的时候会提示失败,失败的原因是ID还是使用的上一个ID值,主键重复导致插入失败。

    异常如下:

    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生成实体时出现重复

    java项目 中使用 org.mybatis.generator生成mysql数据库实体时,由于mysql 数据库中存在多个库,如果库中出现重复表时,会出现生成的实体代码出现重复问题,原因是数据库生成实体时会扫描所有的库,

    解决方法

    1、第一种

    jdbc:mysql://localhost:3306/table?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&nullCatalogMeansCurrent=true

    在连接串中加入nullCatalogMeansCurrent=true就行了

    2、第二种方式是设置

    <table tableName="table" catalog="dataName"></table> 

    使用catalog指定库名

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持3672js教程。

    您可能感兴趣的文章:
    • 关于mybatis-plus-generator的简单使用示例详解
    • MyBatis Generator生成数据库模型实现示例
    • MyBatis Generator使用小结
    • mybatis-generator生成多次重复代码问题以及解决
    相关栏目:

    用户点评