Jfinal向数据库插入2次值的时候,第二次会报错,问题出现在自增id上面

NCThinker 发布于 2013/08/15 18:18
阅读 671
收藏 0

@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里面呢?   请遇到有此问题的帮忙看看。

加载中
1
红星xx
红星xx

手册5.3章节下面一排大红字 说的很清楚了 ,数据承载的 需要 new 一个新对象 ,类似于 dao 用法的 都不能用于数据承载,只能用于查询 ,你搜一下论坛吧 ! 资料挺多的。

0
JFinal
JFinal

    楼上回答完全正确,Model中的dao对象是全局共享的,不能承载数据,JFinal手册有红色字标出来了。

    JFinal 手册才 38页,但大家都不去看,情何以堪啊,看来JFinal手册不能再继续加东西了

0
NCThinker
NCThinker

引用来自“红星xx”的答案

手册5.3章节下面一排大红字 说的很清楚了 ,数据承载的 需要 new 一个新对象 ,类似于 dao 用法的 都不能用于数据承载,只能用于查询 ,你搜一下论坛吧 ! 资料挺多的。

谢谢,看到了,原来如此。

0
NCThinker
NCThinker

引用来自“JFinal”的答案

    楼上回答完全正确,Model中的dao对象是全局共享的,不能承载数据,JFinal手册有红色字标出来了。

    JFinal 手册才 38页,但大家都不去看,情何以堪啊,看来JFinal手册不能再继续加东西了

我错了

0
JFinal
JFinal

引用来自“szkiti”的答案

引用来自“JFinal”的答案

    楼上回答完全正确,Model中的dao对象是全局共享的,不能承载数据,JFinal手册有红色字标出来了。

    JFinal 手册才 38页,但大家都不去看,情何以堪啊,看来JFinal手册不能再继续加东西了

我错了

细看一下 JFinal 手册好处很多   
返回顶部
顶部