2017.7.7 postgreSQL在插入造成重复时执行更新

本文介绍了在PostgreSQL中处理插入数据时遇到重复键异常的策略。通过定义接口和使用特定的SQL语句(如ON CONFLICT DO UPDATE),可以在发生重复时执行更新而非抛出异常。详细讨论了之前采用的异常捕获方法及其存在的问题,并指出在使用@Transactional注解时需要注意的事项。
摘要由CSDN通过智能技术生成

参考来自:https://stackoverflow.com/questions/1109061/insert-on-duplicate-update-in-postgresql/1109198#1109198

功能需求:接口定义中包含字段update,当它为true时,批量插入中有记录造成唯一键重复时,不报异常,而是执行更新。

 

1.接口定义

 1 {
 2    "resources":
 3    [
 4       {
 5        "name":"*",
 6        "display_name": "*",
 7        "description": "*",
 8        "service": "*"
 9       },
10       ....
11    ],
12  "update":"true"
13 
14 }

 

2.代码

原本是通过报的异常 DuplicateKeyException,在catch语句里执行update。但是这样操作有一个问题,后面单独说。

 1             try {
 2                 resourceDao.insert(resource); 5             } catch (DuplicateKeyException e) {
 6 //                if (StringUtils.equals(update,Constants.KEY_FALSE)) {
 7 //                    throw new AuthServiceException(ErrorCode.RESOURCE_DUPLICATE_KEY, new Object[]{resource.getFdResName()}, e);
 8 //                }else if (StringUtils.equals(update,Constants.KEY_TRUE)){
 9 //                    resourceDao.update(resource);
10 //                }
11                 throw new AuthServiceException(ErrorCode.RESOURCE_DUPLICATE_KEY, new Object[]{resource.getFdResName()}, e);
12              } catch (Exception e) {
13                 throw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值