JFinal

登录 注册

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

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

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

评论

  • 01-10 11:42
    Model 体系内才有 attr 这一说,而 Db + Record 模式是没有与数据表进行过映射的,所以里头的 API 需要自己来控制字段的正确
  • 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).
  • 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 切换过去了,记得搞定后回来分享一下,这个是有价值的改进
  • 发送