当前使用版本(必填,否则不予处理)
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 请问你们有什么好的整改方案吗,我们项目全是这种写法