`
fred2005
  • 浏览: 26815 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

mysql自增长的主键Duplicate错误

阅读更多

hibernate3.1

mysql5.1.16

映射文件 配置主键生成策略

<id   name="userid"   column="userid"   type="int">   

  <generator   class="increment"/>   
 </id> 

 

保存数据的时候有时候会报  主键重复的异常

userid现在的值是399

报的异常是   

 

 

 SQL Error: 1062, SQLState: 23000
10:02:15 ERROR JDBCExceptionReporter - Duplicate entry '321' for key 1
10:02:15 ERROR AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
        at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
        at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
        at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
        at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:420)
        at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
        at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
      

 

是什么问题呢,想了我一个晚上,没想到是哪里的问题

难道是native的问题?

数据库的问题?

程序的问题?

 

increment   适用于代理主键。由Hibernate自动以递增方式生成   
identity    适用于代理主键。由底层数据库生成标识符   
sequence    适用于代理主键。Hibernate根据底层数据库的序列生成标识符,这要求底层数据库支持序列   
hilo      适用于代理主键。Hibernate分局high/low算法生成标识符   
seqhilo     适用于代理主键。使用一个高/低位算法来高效的生成long,short或者int类型的标识符。   
native     适用于代理主键。根据底层数据库对自动生成标识符的方式,自动选择identity、sequence或hilo   
uuid.hex    适用于代理主键。Hibernate采用128位的UUID算法生成标识符   
uuid.string     适用于代理主键。UUID被编码成一个16字符长的字符串   
assigned    适用于自然主键。由Java应用程序负责生成标识符   
foreign     适用于代理主键。使用另外一个相关联的对象的标识符 
刚才看了一下日志  报错的对象都是这样的设置<generator class="increment" />

根据hibernate手册的描述,increment是由hibernate来完成自增长的,

increment主键生成器的org.hibernate.id.IncrementGenerator是使用select max( columnName ) from tableName的方式来获取,做应用负载出现问题是必然的。

所以应该杜绝increment的使用。

主键建议使用UUID的方式生成。

 
分享到:
评论

相关推荐

    MySQL自增长键理解

    MySQL中的自增长键是一种特殊类型的字段,主要用于主键,它能自动递增其数值,无需在插入新记录时显式指定。自增长键对于数据库管理非常有用,因为它简化了插入操作,尤其是当需要唯一标识符时。理解自增长键的工作...

    MySQL中如何处理重复数据(Duplicate)?

    MySQL 中处理重复数据(Duplicate)的方法 MySQL 中处理重复数据(Duplicate)的主要方式是使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 语句或 REPLACE INTO 语句。下面是这两种方法的详细解释: 一、INSERT ...

    mysql 1062,mysql error 1062错误探讨.docx

    MySQL 1062 错误代码通常是由于数据表中的主键重复导致的。在进行数据备份和还原时,如果数据表中的主键重复,MySQL 将抛出 1062 错误代码。这种错误可以通过清空数据表、重新导入数据来解决。 MySQL 1062 错误代码...

    mysql #1062 –Duplicate entry ‘1’ for key ‘PRIMARY’

    碰到了 #1062 – Duplicate entry ‘1′ for key ‘PRIMARY’ 当时那个急啊,原本的数据我已经全部删除了,没办法只有请求万能的百度了。我找了大半天终于给我给我找到了。兴奋ing,马上测试,O(∩_∩)O哈哈~成功了...

    MySQL的主键与唯一索引约束

    MySQL中的主键与唯一索引约束是数据库设计中至关重要的概念,它们确保数据的唯一性和完整性。主键是一种特殊的唯一索引,它定义了一个表的唯一标识,不允许有重复值且不能为空。唯一索引则允许有空值,但索引中的每...

    [mysql]mysql通过on duplicate key update实现批量插入或更新(csdn)————程.pdf

    在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在执行INSERT语句时,如果插入的数据违反了唯一性约束(即存在相同的唯一索引),则自动执行UPDATE操作来更新已有记录。这个功能在处理...

    mysql #1062 –Duplicate entry '1' for key 'PRIMARY'

    标题中的“mysql #1062 –Duplicate entry '1' for key 'PRIMARY'”是一个常见的MySQL错误信息,意味着在尝试插入新的数据记录时,遇到了主键冲突。主键是数据库表中唯一标识每条记录的一列或多列,其值必须在表内...

    mysql error:#1062 Duplicate entry ‘***′ for key 1问题解决方法

    总结来说,MySQL 错误 #1062 - "Duplicate entry '***' for key 1" 是由于违反唯一键约束导致的,常见于自增长字段。解决这个问题的方法包括检查并修正数据类型,调整自动增长设置,以及确保数据导入和恢复过程的...

    大牛总结 MySql常见错误集锦

    当尝试创建一个外键约束时,如果不符合MySQL对主键和外键关系的要求(如数据类型不匹配或引用的主键不存在),就会出现此错误。解决办法是检查并修正外键定义,确保它们满足所有约束条件。 4. 错误1064: You have ...

    mysql常见错误与标准错误对照表.docx

    MySQL是世界上最流行的关系型数据库管理系统之一,它在处理数据时可能会遇到各种错误。这份文档,"mysql常见错误与标准错误对照表.docx",提供了一个详细的错误代码和对应的SQLSTATE代码,帮助用户理解和解决MySQL中...

    mysql 原生语句中save 的写法汇总.docx

    例如,一个重复的唯一索引或主键值在表中将导致 duplicate-key 错误,并且语句将被中止。使用 IGNORE 时,行将被丢弃,不会发生错误。忽略的错误可能会生成警告,虽然 duplicate-key 错误不包括在内。” 使用 ON ...

    MYSQL的REPLACE和ON DUPLICATE KEY UPDATE语句介绍解决问题实例

    MySQL中的`REPLACE`和`ON DUPLICATE KEY UPDATE`语句是处理数据插入时可能出现的唯一键冲突的有效方法。这两个语句主要用于更新已有记录或在出现冲突时替换原有记录。 **1. REPLACE语句** `REPLACE`语句在表中具有...

    mysql ON DUPLICATE KEY UPDATE语句示例

    在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在插入新数据时,如果遇到重复的唯一键值,自动执行更新操作,而不是抛出错误。这个功能大大简化了数据处理的流程,特别是当你需要在一...

    深入mysql &quot;ON DUPLICATE KEY UPDATE&quot; 语法的分析

    MySQL的`ON DUPLICATE KEY UPDATE`语法是一种特殊的数据插入机制,它允许你在尝试插入新记录时,如果遇到唯一约束冲突(比如主键或唯一索引的值已经存在),则自动更新已有记录。这个特性在处理数据导入、同步或批量...

    mysql数据库Insert语句后面加ON DUPLICATE KEY UPDATE,保证唯一性1

    这个语句主要用于处理唯一索引(包括主键)的情况,当尝试插入的数据与现有数据冲突时,会触发更新已存在的行而不是抛出错误。 首先,我们来理解一下`ON DUPLICATE KEY UPDATE`的基本结构。当你在`INSERT`语句后...

    MySQL唯一索引重复插入数据解决方案总结.docx

    这种情况下,MySQL 会报一个 Duplicate entry 的错误信息,表示不能在索引列上重复插入值。 处理这种情况可以从业务代码和 MySQL 层面两方面进行处理。在业务代码中,可以根据错误信息来做具体的处理。同时也可以让...

    MySQL存储过程的异常处理方法

    例如,`duplicate_key`对应于错误1062(数据重复),`foreign_key_violated`对应于错误1216(外键约束违反),这些是常见的数据库操作错误。 然后,声明了一个变量`l_manager_id`和一个游标`csr_mgr_id`。游标用于...

    MySQL里Create Index 能否创建主键 Primary Key

    MySQL里Create Index 能否创建主键 Primary Key? 答案: 不能,必须用 Alter table 创建。 MySQL一个索引列最大允许的有效长度,不是列的所有数据都被索引的MyISAM 是 1000字节 InnoDB 是 767 字节 注意这里是字节。...

    Mysql 主从1062问题修复

    MySQL错误代码1062表示“Duplicate entry '...' for key '...''”,意味着在尝试插入一条新记录时,发现该记录的主键值已经存在于表中,违反了主键约束的唯一性。这通常发生在从库尝试同步主库的更改,但已有相同主...

    MySQL 处理插入过程中的主键唯一键重复值的解决方法

    在MySQL数据库中,处理插入数据时遇到主键或唯一键重复的问题有多种策略。本文将详细讲解三种方法:IGNORE、ON DUPLICATE KEY UPDATE和REPLACE,它们都能有效地避免因键重复而导致的插入失败。 1. **IGNORE关键字**...

Global site tag (gtag.js) - Google Analytics