场景:用户绑定微信,一个用户只能绑定一个微信,一个微信也只能绑定一个用户。
表t_sys_user_wechat有2个字段,user_code(唯一索引),openid(主键)
过程:
第一次user1绑定了openid1,成功后
第二次openid2绑定user1,想要的效果是openid1被替换
伪代码:
Model model = getByUserId(user1);
model.setOpenId(openid2);
model.update()
想要的结果为:update t_sys_user_wechat set openid = openid2 where openid = openid1;
实际的结果为:update t_sys_user_wechat set openid = openid2 where openid = openid2;
where条件本想要openid1,结果变成了openid2。
而且,想当然的不使用openid来绑定user_code而使用user_code绑openid,用user_code当主键,openid当唯一索引,一样会有这个问题。
最后解决方案:
Model model 1= getByUserCode(user1);
model1.deleteOnExists();
Model model2 = getByUserCode(openid1);
model2.deleteOnExists();
Model model3 = new Model(user_code,openid);
model3.save();
删除所有存在的绑定关系,重新建立绑定。
建议:jfinal能否支持,通过select出来的model,在update的时候,使用原始主键作为where条件
格式大概为:
model.update(true); 参数表示是否使用原始值作为主键更新,默认为(false),即update()表示不使用跟现有效果保持一致。