jfinal调用save方法主键冲突的问题,是我使用方法不对?
@JFinal 你好,想跟你请教个问题:
直接看代码吧,为了方便我将业务方法『根据手机号注册』放在Customer类中
public class Customer extends Model<Customer> { public static final Customer dao = new Customer(); public static final String ID = "id"; public static final String USERNAME = "username"; public static final String FULLNAME = "fullname"; public static final String PASSWORD = "password"; public static final String SALT = "salt"; public static final String MOBILE = "mobile"; public static final String EMAIL = "email"; public static final String IS_ACTIVE = "is_active"; public static final String CREATE_BY = "create_by"; public static final String CREATE_DATE = "create_date"; public static final String LAST_UPDATE_BY = "last_update_by"; public static final String LAST_UPDATE_DATE = "last_update_date"; public static final String IS_DELETE = "is_delete"; //根据手机号注册 public void registByMobile(String mobile, String password) { //。。。无关代码。。。 new Customer().dao. set(Customer.USERNAME, username). set(Customer.MOBILE, mobile). set(Customer.PASSWORD, encodPwd). set(Customer.SALT, fakeSalt). set(Customer.IS_ACTIVE, "Y"). set(Customer.CREATE_BY, 0). set(Customer.CREATE_DATE, DateUtil.getNow()). set(Customer.LAST_UPDATE_BY, 0). set(Customer.LAST_UPDATE_DATE, DateUtil.getNow()). set(Customer.IS_DELETE, "N"). save(); } }
//进行注册 Customer.dao.registByMobile(mobile, password);
com.jfinal.plugin.activerecord.ActiveRecordException: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '11' for key 'PRIMARY'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
哈哈,不错不错! 其实我去年也试过用反射来实现,但感觉不爽。
回复
啥时候上线啊?
不错 不错 谢啦
model 这个写法真不好。
先说写起来的工作量,model.set(XModel.FieldName, value);
谁知道会重复多少遍呢,如果换成model.setFieldName这样子,至少IDE会为你省事。
谁知道这个字段的具体数据类型呢?Model.set(String key, Object value),你又说要去看数据库文档或者model里面的注释?系统稍微复杂的时候,也不方便。
我总结model get/set写法有两种:
一个是在model中声明属性,比如:
然而在IDEA中,还有个Live Template技术,自己配置一个专门写model get/set的模板,基本上可以做到秒杀的速度完成get/set 的编写,有兴趣的同学自己去研究(相比上面的所有做法都要快上好几倍
)。
谢谢啊 大大你又快又棒 拿到首期款就给你赞助
dao 对象是全局共享的,只能用于查询,不能承载数据,所以将以上有 dao 的代码删掉 dao 即可:new Customer().dao. set(...) 改成: new Customer(). set(...)。Customer.dao.registByMobile(mobile, password); 改成 new Customer().registByMobile(mobile, password);
jfinal 手册上有红色字体明确说明过这个问题,在此下载手册:http://www.jfinal.com