logger日志报错 插入数据时违反主键唯一约束

org.springframework.dao.DuplicateKeyException:
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '189378605' for key 'PRIMARY'
### The error may involve com.ccf.springboot.mapper.middle.MiddleMapper.insertSyncBatch-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO sync_batch ( uniqueId, erpId, manufactureDate, effectivityDate, batchNumber, createdDate, modifyDate ) VALUE (?,?,?,?,?,NOW( ),NOW( ) )

初步分析

  在这个表中主键uniqueId 不是自增长 而是由erpId和batchNumber合并组成主键id

   当有重复的主键id插入时报了这个异常 即插入的数据可能存在数据重复的问题 ok 那么接下来排查下sql 看看原始数据

SELECT DISTINCT
goodsid,
proddate,
v.INVALIDDATE,
lotno
FROM
BMS_ST_qty_LST_GAOXING_V v
WHERE
storageid = 10

在sql中使用了关键字DISTINCT 正常来说不应有重复数据产生 为了排查原因 将报错的erpId 带入本条sql查询(图一中的erpId 对应上图的goodsid)

发现查到数据有2条

接下来去除关键字再试下

发现查到有3条一模一样的数据  这就说明去重关键字实际上有起作用的 但是为什么有一条数据没有去重呢

一番排查后 找到了原因

LOTNO中有一条数据后面存在空串导致 去重关键字没办法去重

解决方案

  经上面查证 证实是数据维护的原因 脑海里第一个想法是修改数据 但是考虑到数据有关联的原因 修改并不合适

  但假如不修改 将查询到的数据直接插入到sync_batch 还是会报异常

    尝试将异常抓起 不予解决 然后记录日志   问题解决

   

for (SyncBatch erpSyncBatch : erpListSyncBatch) {
if (erpSyncBatch.getFlag() == null) {
try {
middleService.insertSyncBatch(erpSyncBatch);
} catch (DuplicateKeyException e) {
LOGGER.error("违反唯一约束"+erpSyncBatch.getErpId());
}catch (Exception e) {
LOGGER.error(ERROR_SYNC_BATCH,e);
throw new RuntimeException(e);
}
}
}

  

DISTINCT 去重仍有重复的分析的更多相关文章

  1. Linq 中的distinct去重

    Linq的Distinct和T-Sql的distinct一样,可以将重复的结果集去重注意: 1 distinct去重记录要求每个字段都重复时,才算重复对象,这与sql一样2 distinct语句可以和 ...

  2. .NET-list扩展方法Distinct去重

    原文链接:https://blog.csdn.net/daigualu/article/details/70800012 .NET中list的扩展方法Distinct可以去掉重复的元素,分别总结默认去 ...

  3. sqlserver中distinct的用法(不重复的记录)

    下面先来看看例子: table表 字段1     字段2   id        name   1           a   2           b   3           c   4    ...

  4. mysql distinct 去重

    在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count( ...

  5. (转)mysql自增列导致主键重复问题分析

    mysql自增列导致主键重复问题分析...  原文:http://www.cnblogs.com/cchust/p/3914935.html 前几天开发童鞋反馈一个利用load data infile ...

  6. 无生物学重复RNA-seq分析 CORNAS: coverage-dependent RNA-Seq analysis of gene expression data without biological replicates

    无生物学重复RNA-seq分析 CORNAS: coverage-dependent RNA-Seq analysis of gene expression data without biologic ...

  7. 存储过程系列三:根据表别名方式distinct去重插入

    1.根据表别名方式distinct去重插入 insert into GG_XKZ_YLQXSCXKESL_SCDZ           ( bzj, xkzid,  sqid, jtdz, szsf, ...

  8. SQLSERVER去除某一列的重复值并显示所有数据\DISTINCT去重\ISNULL()求SUM()\NOT EXISTS的使用

    进入正题,准备我们的测试数据 1.我们要筛选的数据为去除 GX 列的重复项 并将所有数据展示出来,如图所示: ' 2.这种情况下我们是不可以使用DISTINCT来去重的,我们可以来尝试一下: 首先,单 ...

  9. 扩展lamda表达中distinct按照字段去除重复

    首先,我们定义一个Student类来测试. public class Student { public int ID { get; set; } public string Name { get; s ...

随机推荐

  1. idea tomcat 日志的存放路径

    idea的项目发布web项目与eclipse很不同,于是思想被固化了后(用eclipse久了),折腾这个走弯路好多条.首先settings下配的Application Server是配置本机tomca ...

  2. mysql四-2:多表查询

    一.介绍 本节主题: 多表连接查询 复合条件连接查询 子查询 准备表: #建表 create table department( id int, name ) ); create table empl ...

  3. angular监听移动端键盘的弹起和收回

    页面的提交按钮采用的是固定定位在页面的底部,键盘弹出后,提交按钮紧挨着键盘的上方,输入框获得焦点后,键盘弹出,并且输入框回自动定位上方的空白处,此时由于键盘上方固定定位的提交按钮的原因有可能会遮挡住获 ...

  4. .NET开源工作流RoadFlow-表单设计-HTML编辑器

    roadflow目前采用的html编辑器为ueditor编辑器(和表单设计器的编辑器相同). 绑定字段:与数据表的某个字段对应. 宽度:编辑器的宽度. 高度:编辑器的高度. 运行效果如下:

  5. android 账户管理

    1.Android开发之帐户管理 2.Android 帐户管理 小记 3.Android特色开发之账户管理 4.android AccountManager and SyncManager 5.And ...

  6. 【MATLAB】十进制字节矩阵与比特流矩阵的互相转化

    for i=1:length(enc_out_data) data_bits_temp=dec2bin(enc_out_data(i),8); databits((i-1)*8+1:i*8)=doub ...

  7. 【java开发系列】—— 深克隆和浅克隆

    Java支持我们对一个对象进行克隆,通常用在装饰模式和原型模式中.那么什么是深克隆,什么是浅克隆呢. [浅克隆],通常只是对克隆的实例进行复制,但里面的其他子对象,都是共用的. [深克隆],克隆的时候 ...

  8. 关于Oracle RAC节点间免密码策略

    在RAC安装过程中无论grid或是Oracle软件都需要配置节点间免密码策略.配置方法网上有很多,oracle和可以帮你配置,此处不多说. 但是在RAC运行过程中是不需要免密码登陆的,所以在集群安装完 ...

  9. myeclipse 阿里巴巴java开发规范

    今天发现阿里巴巴搞了个java开发规范,然后火了: 然后发现我也整了一下: 阿里巴巴java开发规范宣传页: http://mp.weixin.qq.com/s/IbibsXlWHlM59kfXJqR ...

  10. LA 3126 出租车

    题目链接:https://vjudge.net/problem/UVALive-3126 题意:有m个客人,位于不同的位置,去一些地方,出发的时间给出,要一些出租车去接,但是,每辆出租车要在出发前一分 ...