关于Db保存List集合的反馈

有一个Model  其中有一个字段是Long类型的,数据库对应的类型是BigInt。

然后我使用

Db.batchSave(records,records.size());

进行存储的时候,该Long类型字段存储不进去数据库,并且能确定Model该字段是有数据的,

但是当使用for循环  单个进行保存的时候,是可以存入进数据库的.

records.forEach(it -> {
    it.save()})


评论区

JFinal

2017-12-12 11:49

设置一下: arp.setShowSql(true) 将这两种情况生成的 sql 输出到控制台,对比一下差异,看看是什么情况

Pencilso

2017-12-12 15:35

保存集合的sql打印:
insert into `record`(`low_hypertension`, `high_hypertension`, `device_id`, `user_id`, `steps_num`, `heart_rate`, `state`, `raw_data`, `record_time`, `oxygen`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
for循环保存的sql打印:
Sql: insert into `record`(`low_hypertension`, `high_hypertension`, `device_id`, `user_id`, `steps_num`, `heart_rate`, `state`, `raw_data`, `record_time`, `oxygen`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Sql: insert into `record`(`low_hypertension`, `high_hypertension`, `consum_time`, `device_id`, `user_id`, `steps_num`, `heart_rate`, `state`, `raw_data`, `record_time`, `oxygen`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

初步认为,保存集合的时候,是根据第一个元素来生成插入sql的,但是我第一个元素的Long类型的字段是没有数据的,是null,导致没有将该字段生成到sql语句当中

JFinal

2017-12-12 18:03

@Pencilso batchSave 就是以第一个元素为蓝本生成 sql 的,这个 API 必须要生成 sql,而且必须只能生成一条 sql,那么问题的焦点就在于以哪条元素为蓝本生成

jfinal 选择第一个元素为蓝本,这个在这个方法的注释中有说明

热门反馈

扫码入社