Atea - Hero's Grave

面向对象,开源,框架,敏捷,云计算,NoSQL,商业智能,编程思想。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  40 随笔 :: 0 文章 :: 28 评论 :: 0 Trackbacks
一段hibernate的SchemaExport,原来在win下运行正常,放到linux下就出了问题,在插入数据的时候发生了异常:
2009-01-30 11:59:19,555 -WARN- org.hibernate.util.JDBCExceptionReporter:77 SQL Error: 1062, SQLState: 23000
2009-01-30 11:59:19,556 -ERROR- org.hibernate.util.JDBCExceptionReporter:78 Duplicate entry '???' for key 2
2009-01-30 11:59:19,562 -ERROR- org.hibernate.event.def.AbstractFlushingEventListener:301 Could not synchronize database
state with session
org.hibernate.exception.ConstraintViolationException: could not insert: 

Caused by: java.sql.BatchUpdateException: Duplicate entry 
'???' for key 2
第一反应是SchemaExport的问题,后来才想到人家才不会那么耦合:P
上网搜,都是说主键generator的问题,和我遇到的并不相符。

后来装了mysql的administrator,找到了原因。表引擎都变成了MyISAM,而不是期望的InnoDB。我的代码是在用到batch的时候(Session.flush())才出的错,查了查MyISAM的资料,应该就是这个了。
编辑了etc/mysql/my.cnf,在[mysqld]下面追加了default-storage-engine=INNODB
PS:在win下我不记得有配过这个设置,有可能是操作系统的默认引擎不一样,回公司的时候查一下吧:)

另外忘了改Default Character Set,也需要变成UTF-8才可以:default-character-set=utf8
PS:需要把原DB删掉重建才管用。
posted on 2009-01-31 10:36 Atea 阅读(3866) 评论(2)  编辑  收藏 所属分类: DatabaseHibernate

评论

# re: 一种org.hibernate.exception.ConstraintViolationException 2009-05-25 16:34 匿名
解决不了问题啊  回复  更多评论
  

# re: 一种org.hibernate.exception.ConstraintViolationException 2009-05-28 20:59 Atea
@匿名
怎么个解决不了问题?  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: