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 中处理重复数据(Duplicate)的方法 MySQL 中处理重复数据(Duplicate)的主要方式是使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 语句或 REPLACE INTO 语句。下面是这两种方法的详细解释: 一、INSERT ...
MySQL 1062 错误代码通常是由于数据表中的主键重复导致的。在进行数据备份和还原时,如果数据表中的主键重复,MySQL 将抛出 1062 错误代码。这种错误可以通过清空数据表、重新导入数据来解决。 MySQL 1062 错误代码...
碰到了 #1062 – Duplicate entry ‘1′ for key ‘PRIMARY’ 当时那个急啊,原本的数据我已经全部删除了,没办法只有请求万能的百度了。我找了大半天终于给我给我找到了。兴奋ing,马上测试,O(∩_∩)O哈哈~成功了...
MySQL中的主键与唯一索引约束是数据库设计中至关重要的概念,它们确保数据的唯一性和完整性。主键是一种特殊的唯一索引,它定义了一个表的唯一标识,不允许有重复值且不能为空。唯一索引则允许有空值,但索引中的每...
在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在执行INSERT语句时,如果插入的数据违反了唯一性约束(即存在相同的唯一索引),则自动执行UPDATE操作来更新已有记录。这个功能在处理...
标题中的“mysql #1062 –Duplicate entry '1' for key 'PRIMARY'”是一个常见的MySQL错误信息,意味着在尝试插入新的数据记录时,遇到了主键冲突。主键是数据库表中唯一标识每条记录的一列或多列,其值必须在表内...
总结来说,MySQL 错误 #1062 - "Duplicate entry '***' for key 1" 是由于违反唯一键约束导致的,常见于自增长字段。解决这个问题的方法包括检查并修正数据类型,调整自动增长设置,以及确保数据导入和恢复过程的...
当尝试创建一个外键约束时,如果不符合MySQL对主键和外键关系的要求(如数据类型不匹配或引用的主键不存在),就会出现此错误。解决办法是检查并修正外键定义,确保它们满足所有约束条件。 4. 错误1064: You have ...
MySQL是世界上最流行的关系型数据库管理系统之一,它在处理数据时可能会遇到各种错误。这份文档,"mysql常见错误与标准错误对照表.docx",提供了一个详细的错误代码和对应的SQLSTATE代码,帮助用户理解和解决MySQL中...
例如,一个重复的唯一索引或主键值在表中将导致 duplicate-key 错误,并且语句将被中止。使用 IGNORE 时,行将被丢弃,不会发生错误。忽略的错误可能会生成警告,虽然 duplicate-key 错误不包括在内。” 使用 ON ...
MySQL中的`REPLACE`和`ON DUPLICATE KEY UPDATE`语句是处理数据插入时可能出现的唯一键冲突的有效方法。这两个语句主要用于更新已有记录或在出现冲突时替换原有记录。 **1. REPLACE语句** `REPLACE`语句在表中具有...
在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在插入新数据时,如果遇到重复的唯一键值,自动执行更新操作,而不是抛出错误。这个功能大大简化了数据处理的流程,特别是当你需要在一...
MySQL的`ON DUPLICATE KEY UPDATE`语法是一种特殊的数据插入机制,它允许你在尝试插入新记录时,如果遇到唯一约束冲突(比如主键或唯一索引的值已经存在),则自动更新已有记录。这个特性在处理数据导入、同步或批量...
这个语句主要用于处理唯一索引(包括主键)的情况,当尝试插入的数据与现有数据冲突时,会触发更新已存在的行而不是抛出错误。 首先,我们来理解一下`ON DUPLICATE KEY UPDATE`的基本结构。当你在`INSERT`语句后...
这种情况下,MySQL 会报一个 Duplicate entry 的错误信息,表示不能在索引列上重复插入值。 处理这种情况可以从业务代码和 MySQL 层面两方面进行处理。在业务代码中,可以根据错误信息来做具体的处理。同时也可以让...
例如,`duplicate_key`对应于错误1062(数据重复),`foreign_key_violated`对应于错误1216(外键约束违反),这些是常见的数据库操作错误。 然后,声明了一个变量`l_manager_id`和一个游标`csr_mgr_id`。游标用于...
MySQL里Create Index 能否创建主键 Primary Key? 答案: 不能,必须用 Alter table 创建。 MySQL一个索引列最大允许的有效长度,不是列的所有数据都被索引的MyISAM 是 1000字节 InnoDB 是 767 字节 注意这里是字节。...
MySQL错误代码1062表示“Duplicate entry '...' for key '...''”,意味着在尝试插入一条新记录时,发现该记录的主键值已经存在于表中,违反了主键约束的唯一性。这通常发生在从库尝试同步主库的更改,但已有相同主...
在MySQL数据库中,处理插入数据时遇到主键或唯一键重复的问题有多种策略。本文将详细讲解三种方法:IGNORE、ON DUPLICATE KEY UPDATE和REPLACE,它们都能有效地避免因键重复而导致的插入失败。 1. **IGNORE关键字**...