zno2

主键冲突异常 DuplicateKeyException

 

org.springframework.dao.DuplicateKeyException


Exception thrown when an attempt to insert or update data results in violation of an primary key or unique constraint. Note that this is not necessarily a purely relational concept; unique primary keys are required by most database types.

Author:
Thomas Risberg

代码片段

import org.springframework.dao.DuplicateKeyException;

try{
    someMapper.insert(someBean);
    //TODO something
}catch(DuplicateKeyException e){
    //TODO something else
}

 

 

补充:20211121

如何快速测试这个异常

建一个表,设置一个唯一索引

CREATE TABLE `aa` (
`a`  varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL ,
UNIQUE INDEX `a` (`a`) USING BTREE 
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci
ROW_FORMAT=DYNAMIC
;

 

mapper

public interface UserMapper {
    
    @Insert("insert into aa (a) values ('1')")
    public void inserta();
}

 

test

    @Test
    public void testaa() {
        userMapper.inserta();
        userMapper.inserta();
    }

 

异常

org.springframework.dao.DuplicateKeyException: 
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'a'
### The error may exist in cn/xs/qishi/wiki/mapper/UserMapper.java (best guess)
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: insert into aa (a) values ('1')
### Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'a'
; Duplicate entry '1' for key 'a'; nested exception is java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'a'
	at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:243)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
	at com.sun.proxy.$Proxy33.insert(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62)
	at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
	at com.sun.proxy.$Proxy35.inserta(Unknown Source)
	at cn.xs.qishi.wiki.mapper.UserMapperTest.testaa(UserMapperTest.java:41)

 

场景,如果少量重复,不必每次都去查询检查是否存在再去插入数据。节省大量查询工作。

posted on 2016-08-06 08:04  zno2  阅读(14871)  评论(0编辑  收藏  举报

导航