三种主键冲突的处理方法
1、注解+异常捕捉
A.注解
在事务传播机制中加上注解:
@Transactional(propagation=Propagation.MANDATORY,noRollbackFor={DuplicateKeyException.class})
作用:不加此注解,发生主键冲突时,事务的状态是异常的,不能进行提交。 ---> 忽略事务的异常状态!!!
B.捕捉异常
try{
//业务逻辑
}catch(DuplicateKeyException e){
//不做处理,这样就相当于忽略了主键冲突
}
作用:不捕捉此异常,交易会抛出主键冲突的异常,交易报错。 ---> 忽略主键冲突异常的报错!!!
2、采用replace into 替换insert
replace into向数据库中插入数据时:
insert数据,如果存在主键冲突,则删除重复的那行数据,然后再插入一行;
insert数据,如果不存在主键冲突,则直接插入。
3、预处理
A.插入前先查询,如果存在记录则不再执行insert;不能存在,再执行insert。
B.插入前先删除,再执行insert。