如何处理联合主键中,更新某个主键的值

需求:调用dao.update()方法,进行数据更新(更新联合主键中的某个主键值)

MappingKit的代码:

arp.addMapping(tableName, "id1, id2" , modelClass)

然后,我调用.update()方法,来更新id2的值,发现更新失败,看源码发现,底层拼接的sql语句是

“update tablname set a='  '  where  id1= and id2= ”,所以导致id2允许被更新。另外因为通过对象来更新的,因此写sql语句就不现实。不知道有什么办法解决吗

评论区

JFinal

2020-04-30 12:55

Db.update("update tablename set id1=? where id2= ?", 123, 456);

以上代码将 tableName 的 id2 主键值更新为了 456

tomatocc

2020-04-30 14:25

@JFinal 不不不。这只是个例子,实际更新的是id2加其他的,用对象保存的。不是sql

JFinal

2020-04-30 15:45

@tomatocc 都一样, 没有一条 sql 是搞不定的,如果有,那就两条 sql

tomatocc

2020-04-30 16:14

@JFinal 。。。不能用sql,。。。只能用model

杜福忠

2020-04-30 16:37

@tomatocc Db.update(tableName, primaryKey, new Record().setColumns(model))

杜福忠

2020-04-30 16:50

如果这样的写法经常用到的话, 只需要在 BaseModel 中 增加一个 方法,把如上代码 拷贝进去封装一下就可以了, 如:
public boolean updateByKey(String primaryKey) {
return Db.use(_getConfig().getName()).update(_getTable().getName(), primaryKey, new Record().setColumns(this));
}

热门反馈

扫码入社