这次集成人大金仓(KingBase)V9R1时 代码执行时遇到一个这样的问题:
存储的参数为
代码报错位置为
因JpaRepository 的save方法是根据参数中是否有id进行判断是新增还是更新 所以可知本次操作为新增操作 且因为主键重复导致报错 可知是因为主键的生产策略问题 根据排查 已知的代码中主键生产策略为
而人大金仓中的主键默认值为:
根据以上情况和人大金仓技术支持沟通后获知解决办法为:
1、首先查询下数据库中该表的序列值:
操作如下:
在kingbase中手敲sql,注意一定要手敲否则报错!!!
> SELECT nextval(sys_get_serial_sequence('表名', 'id')) AS new_id;(获取自增列的下一个值)
> 执行这个sql,执行一次就行
> 示例: select nextval(sys_get_serial_sequence('t_isp_service','id')) AS new_id;
执行后发现我的new_id是35 而我本身数据已存在的最大id已经为127
所以我需要更新这个序列值为我最大的id值:
操作如下:
> 必须手敲!!!!
> select setval(seq_name,new_seq_value); seq_name 序列名称 new_seq_value 新的值
> 其中序列名称为表结构里的默认值中的名字:在本次案例中为isp_new.t_isp_service_id_seq1
更新后再次执行
select nextval(sys_get_serial_sequence('t_isp_service','id')) AS new_id;
得到结果发现已经更新