我尽量叙事的清楚点吧,可能稍微啰嗦点。报错内容让我很头疼,我都开始怀疑mybatits 3.0.2 和mysql 5.1是不是本身就有bug了。
请大神们稍事略过下面的代码,然后我再叙述
项目使用到了spring 3 + mybatits 3.0.2 + mysql 5.1
在存储历史记录是报错。偶尔报错,感觉应该是万分之几的概率吧。
Caused by: org.springframework.dao.DuplicateKeyException: SqlSession operation; SQL []; Duplicate entry '5879889-35399' for key 'user_id'; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '5879889-35399' for key 'user_id' at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:241) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.mybatis.spring.SqlSessionTemplate.wrapException(SqlSessionTemplate.java:364) at org.mybatis.spring.SqlSessionTemplate$7$1.doInSqlSession(SqlSessionTemplate.java:344) at org.mybatis.spring.SqlSessionTemplate.execute(SqlSessionTemplate.java:173) at org.mybatis.spring.SqlSessionTemplate.execute(SqlSessionTemplate.java:155) at org.mybatis.spring.SqlSessionTemplate$7.invoke(SqlSessionTemplate.java:339) at $Proxy59.addFavorite(Unknown Source) at -------------------------------------.addFavorite(---------.java:104) at -------------------------------------$$FastClassByCGLIB$$bf29fae7.invoke(<generated>) at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:692) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625) at ------------------------------------$$EnhancerByCGLIB$$1aaa1136.addFavorite(<generated>) at-------------------------------------.addFavorite(--------.java:277) ... 32 more Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '58179889-353994' for key 'user_id' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1039) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362) at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:989) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:22) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:51) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:29) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:73) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:43) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:102) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:91) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:54) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:35) at $Proxy59.addFavorite(Unknown Source) at sun.reflect.GeneratedMethodAccessor926.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.mybatis.spring.SqlSessionTemplate$7$1.doInSqlSession(SqlSessionTemplate.java:342) ... 48 more
上面一堆横杆是我替换了我项目的路径或者类名,
异常中得Duplicate entry '5879889-35399' for key 'user_id'我解释一下
5859889是用户id,35399是书籍id,我再写sql的时候,明明是写对对应的字段的。但是在写入数据库的时候就报错了。
sql如下
<insert id="addFavorite" useGeneratedKeys="true" keyProperty="id" > INSERT INTO favorites (<include refid="favorite.columns" /> <![CDATA[ ) VALUES ( #{id} , #{userId} , #{bookId} , NOW() ) ]]> </insert>
业务代码如下
favorite = new Favorite(); favorite.setBookId(bookInfo.getId()); favorite.setUserId(user.getId()); FavoriteFacade.addFavorite(favorite);// 加入收藏
对于favorite的bookId和userId我都设置的是Integer类型。
不知道为什么,两个字段的内容,再写入数据库的时候,就写在了一块。中间的 - ,是咋回事啊,哪里冒出来的啊????数据库中user_id是int类型。
项目跑了许久了。但是时不时就报着个错误。我感觉我的代码,写的没问题。所以就开始怀疑mybatits 3.0.2 和mysql 5.1是不是本身就有bug了。
大神们,给点建议吧~~~
相关推荐
Java实现批量向mysql写入数据的方法 Java语言是目前最流行的编程语言之一,在数据库应用中,Java语言广泛应用于与数据库的交互,特别是mysql数据库。mysql数据库是目前最流行的开源关系数据库管理系统,它提供了...
在MySQL数据库管理中,添加字段是一项常见的操作,用于在已有的数据表中增加新的列来扩展数据表的结构。这通常发生在数据需求发生变化或者需要记录更多相关信息时。本篇文章将详细探讨如何在MySQL中添加字段,以及...
要求:查询一个字段的数据,将每个数据拆分,取第一个字符,将第一个字符遍历出来,替换到另一个字段里面
在使用mysql的过程中,有个问题就是mysql的优化,mysql中longblob字段在5.5版本中默认的为1M。 想改变这个问题,需要注意几点: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2054817 > ...
在本实例中,我们将探讨如何使用易语言连接MySQL数据库,进行数据的读取、写入和修改操作。 首先,连接MySQL数据库是所有操作的基础。易语言提供了“数据库”类库,其中包含了一系列与数据库交互的命令。我们需要...
MySQL批量对表增加指定字段,会快速实现批量字段的添加。写了2个存储存储过程,执行即可。方便快速!
Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_...
mysql查询包含某字段的所有表. 根据字段名称找出含有该字段的所有表。
例如,可以使用`Maxwell`或`Canal`这样的工具监听MySQL的binlog事件,当MySQL中的数据发生变化时,将变更同步到ClickHouse。这种方式需要保持MySQL的binlog格式为ROW模式,以便能解析出具体的字段变更。 - **ETL...
在别人基础上修改了一下。 感性原作者的奉献 一起贡献都归功与原作者
标题中的“10倍以上提高Pentaho Kettle的MySQL写入速度”指的是通过优化Pentaho Kettle(也称为Kettle或PDI)的数据处理流程,显著提升了将数据导入到MySQL数据库的速度。Pentaho Kettle是一款强大的ETL(提取、转换...
1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、查询出所有数据进行分组之后,和重复数据...
其原因是distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。...
刚开始使用python,还不太熟练,遇到一个datetime数据类型的问题: 在mysql数据库中,有一个datetime类型的字段用于存储记录的日期时间值。python程序中有对应的一个datetime变量dt。 现在需要往mysql数据库中添加...
可以用python接收传感器串口数据,将数据传入本地MySQL或者云端MySQL
`,这会将`old-table`中对应的字段数据插入到`new-table`中。 3. 最后,你可以使用`mysqldump`来导出`new-table`,并根据需要进行文本处理。 **方法二:使用MySQL的SELECT INTO OUTFILE备份语句** 这种方法非常...
而`flume-mysql-sink-1.0-SNAPSHOT.jar`可能是一个自定义的接收器,用于将数据写入MySQL。此外,Flume的配置文件`flume-conf.properties`用于设置数据流动的路径、源和接收器的属性等。 2. **MySQL**: `mysql-...
mysql导出工具,可导出无注释插入语句,表中字段有blob类数据,插入语句前还有锁表操作语句,适合多种场景