model的batchSave没有过滤非字段属性 版本3.5

model的batchSave没有过滤非字段属性,

batchUpdate里边有table.hasColumnLabel(attr)进行了过滤。是不是把batchSave漏掉了?

评论区

JFinal

2019-01-10 11:42

Model 体系内才有 attr 这一说,而 Db + Record 模式是没有与数据表进行过映射的,所以里头的 API 需要自己来控制字段的正确

彼岸的包子

2019-01-10 15:44

@JFinal 是model
Db的batchSave(List modelList, int batchSize)
batchSave和batchUpdate中进入DbPro后都调用了batch方法
return batch(sql.toString(), columns.toString(), modelList, batchSize);

在batchUpdate中构造sql和columns属性时都进行了过滤
但是在batchSave中没有对columns属性进行过滤
调用batchSave,如果存在非字段属性就会报错
Parameter index out of range (3 > number of parameters, which is 2).

JFinal

2019-01-10 16:16

@彼岸的包子 刚看了一下,确实是这样,目前建议你按如下办法解决:
1:创建 public class MyDbPro extends DbPro,覆盖掉其中的 batchSave(...) 方法,仿照 batchUpdate(...) 方法添加过滤

2:创建一个 MyDbProFactory:
public class MyDbProFactory implements IDbProFactory {
public DbPro getDbPro(String configName) {
return new MyDbPro(configName);
}
}

3:在 configPlugin 中配置一下 ActiveRecordPlugin 对象:
arp.setDbProFactory(new MyDbProFactory());

这样就可以将自己改进过的 MyDbProFactory 切换过去了,记得搞定后回来分享一下,这个是有价值的改进