奇怪的数据插入错误Could not execute JDBC batch update?

chishan911 2006-10-13 09:21:56
最近学习struts+spring+hibernate开发模式,出现了这样的问题:
框架配置好后,向数据库表插入一条记录成功,再次插入记录时报错,
并且只能在启动web服务器后进行一次插入操作,再插入就报错,错误信息如下:

exception

javax.servlet.ServletException: Hibernate operation: Could not execute JDBC batch update; SQL [insert into T_FILE (FILE_NAME, FILE_CONTENT, REMARK, FILE_ID) values (?, ?, ?, ?)]; Duplicate entry '402866810e3d3185010e' for key 1; nested exception is java.sql.BatchUpdateException: Duplicate entry '402866810e3d3185010e' for key 1
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

root cause

org.springframework.dao.DataIntegrityViolationException: Hibernate operation: Could not execute JDBC batch update; SQL [insert into T_FILE (FILE_NAME, FILE_CONTENT, REMARK, FILE_ID) values (?, ?, ?, ?)]; Duplicate entry '402866810e3d3185010e' for key 1; nested exception is java.sql.BatchUpdateException: Duplicate entry '402866810e3d3185010e' for key 1
.......

其中T_FILE表的主键为FILE_ID,在hibernate配置文件中的生成方式为uuid.hex,
为什么第二次插入数据时key的值没有变呢,还是上次插入的??
...全文
1941 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chishan911 2007-04-20
  • 打赏
  • 举报
回复
楼主声明:没有得到可行的答案,但要结帖了,无奈!
chishan911 2006-10-13
  • 打赏
  • 举报
回复
问题是FILE_ID是varchar类型的,mysqlautoincremetnt只能针对int类型的呀.
还有一个更怪的问题:同样的程序在公司机器上运行一切正常,在我的个人机器上就报错,
两台机器的配置 开发环境都一样呀.
tonyzhangcn 2006-10-13
  • 打赏
  • 举报
回复
应该是助键重复了,不要使用hibernate自己提供的这些主键生成方式。因为这些都没有做synchronize,因此产生的主键不保证唯一。可使用数据库提供的方式,例如mysql的autoincremetnt,sqlserver的 increment,oracle的sequence等。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧