当前使用版本(必填,否则不予处理)

3.5.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

实体类已经指明IdType.AUTO数据库自增,但是由于循环插入过程中实体类复用,导致在循环中第二次调用save时,实体类中ID字段已经有第一次回传的ID ,这是再去save会报无法显示插入ID,之前用的3.1.1版本没有这个问题。 我认为只要实体类主键字段已经设置为IdType.AUTO 自增,那么在构造insert sql是不是应该不管这个字段是否有值,都不要显示在插入的sql中。

重现步骤(如果有就写完整)

定义一个表实体,对应数据库有一个自增主键的表,循环将这个表实体通过 save方法入库,每次只改变该表实体的非主键值,在循环到第二次时会报错。

报错信息

当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'SHIP_MACHING_BLOCK_RELATION' 中的标识列插入显式值。

Comment From: qmdx

java 基础好好学习下,请不要使用同一对象循环操作

Comment From: seasomnia

为啥3.1.1版本是ok的

Comment From: seasomnia

我翻了更新日志并没有关于Idtype的更新啊。。。

Comment From: seasomnia

而且不用一个对象循环也是这样的,显式给IdType.AUTO赋值后调用save方法就会报错,我回退到3.1.1版本同样的操作,打印出来的sql是不包括ID列的,尽管我显示得给ID列赋值了。求解。。

Comment From: qmdx

而且不用一个对象循环也是这样的,显式给IdType.AUTO赋值后调用save方法就会报错,我回退到3.1.1版本同样的操作,打印出来的sql是不包括ID列的,尽管我显示得给ID列赋值了。求解。。

旧版本 auto 上 sql 处理上和新版有区别,新版是为了允许数据库自增可用自定义 id 才会有循环同一个对象重复id插入问题。

两个解决办法: 1,不要循环同一个对象 2,循环中 setId null

Comment From: seasomnia

谢谢,Auto的判断加上不同数据库的方言判断就更好了,sqlserver是不支持数据库自增可用自定义id的

Comment From: ChinaWim

@seasomnia 请问你们有什么好的整改方案吗,我们项目全是这种写法