findByIdLoadColumns 存在参数匹配问题

刚刚在修改一个老系统是将jfinal 升级到了 4.8 其中 4.6版本的修改 findById  findByIds 会导致问题

原因在于原来findById 本身就有可能是个数组调用findById 后 再次包装  ,对于已有系统findById(Object ...ids)写法较为常见特别是用于二次封装时 如果不兼容处理 修改量太大而且不一定能改完容易有暗坑

之后修改 findByIdLoadColumns 方法如下

public M findByIdLoadColumns(Object[] idValues, String columns) { 

Table table = _getTable();

if(idValues.length==1 && ArrayUtil.isArray(idValues[0])){

idValues=(Object[]) idValues[0];

}

if (table.getPrimaryKey().length != idValues.length)

throw new IllegalArgumentException("id values error, need " + table.getPrimaryKey().length + " id value");

Config config = _getConfig();

String sql = config.getDialect().forModelFindById(table, columns);

List<M> result = find(config, sql, idValues);

return result.size() > 0 ? result.get(0) : null;

}


评论区

JFinal

2020-05-21 17:28

将这个改进引入到你自己的一个中间型 Model 中去,然后对生成器改进一下,让 BaseModel 继承你的这个中间型 Model,就可以应用上你这个改进了

无涯

2020-05-25 14:30

@JFinal 我就是这么干的

JFinal

2020-05-25 14:43