@JFinal 你好,想请教个问题
问题描述如下:
使用JFinal插入值
public void suggestion() { Suggestion.suggestionDao.set("userId", getPara("userId")); Suggestion.suggestionDao.set("suggestion", getPara("suggestion")); Suggestion.suggestionDao.set("uploadTime", new Date()); boolean flag = Suggestion.suggestionDao.save(); writeJson(flag, null); }
数据库表结构如下:
id(integer 自增id)问题就出在这个自增id上, userId, suggestion, uploadTime.
第一次的时候使用上面的suggestion() 方法能够成功的向数据库中插入值。 如下所示:
{userId=-1, suggestion=8, uploadTime=Thu Aug 15 17:53:59 CST 2013}
Controller : com.szfore.ideaddpass.controll.SuggestionController.(SuggestionController.java:1)
Method : suggestion
Parameter : userId=-1 suggestion=8
--------------------------------------------------------------------------------
Sql: insert into `suggestion`(`userId`, `suggestion`, `uploadTime`) values(?, ?, ?)
注意最后一句SQL,数据库总共四个字段,id是自增id不需要传值。上面是正常执行的。
当我第二次执行的时候,问题出现了。原因很简单,如下 注意SQL,自增id居然出现在里面了,经过调试的时候发现id的值,竟然是第一次插入时候返回的id,这样在执行插入操作就会报 主键重复的错误。为什么会这样呢??
JFinal action report -------- 2013-08-15 17:54:49 ------------------------------
Controller : com.szfore.ideaddpass.controll.SuggestionController.(SuggestionController.java:1)
Method : suggestion
Parameter : userId=-1 suggestion=8
--------------------------------------------------------------------------------
Sql: insert into `suggestion`(`id`, `userId`, `suggestion`, `uploadTime`) values(?, ?, ?, ?)
/** * Save model. */ public boolean save() { TableInfo tableInfo = tableInfoMapping.getTableInfo(getClass()); StringBuilder sql = new StringBuilder(); List<Object> paras = new ArrayList<Object>(); DbKit.dialect.forModelSave(tableInfo, attrs, sql, paras);
问题的就是上面代码最后一句,第二个参数attrs,它里面包含了自增id,最终导致了上面的错误。为什么上一次的插入后返回的id会存在attrs里面呢? 请遇到有此问题的帮忙看看。
手册5.3章节下面一排大红字说的很清楚了,数据承载的需要new一个新对象,类似于dao用法的都不能用于数据承载,只能用于查询,你搜一下论坛吧!资料挺多的。
楼上回答完全正确,Model中的dao对象是全局共享的,不能承载数据,JFinal手册有红色字标出来了。
JFinal手册才38页,但大家都不去看,情何以堪啊,看来JFinal手册不能再继续加东西了
手册5.3章节下面一排大红字说的很清楚了,数据承载的需要new一个新对象,类似于dao用法的都不能用于数据承载,只能用于查询,你搜一下论坛吧!资料挺多的。
楼上回答完全正确,Model中的dao对象是全局共享的,不能承载数据,JFinal手册有红色字标出来了。
JFinal手册才38页,但大家都不去看,情何以堪啊,看来JFinal手册不能再继续加东西了
楼上回答完全正确,Model中的dao对象是全局共享的,不能承载数据,JFinal手册有红色字标出来了。
JFinal手册才38页,但大家都不去看,情何以堪啊,看来JFinal手册不能再继续加东西了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。