一段hibernate的SchemaExport,原來在win下運(yùn)行正常,放到linux下就出了問題,在插入數(shù)據(jù)的時候發(fā)生了異常:
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
第一反應(yīng)是SchemaExport的問題,后來才想到人家才不會那么耦合:P
上網(wǎng)搜,都是說主鍵generator的問題,和我遇到的并不相符。
后來裝了mysql的administrator,找到了原因。表引擎都變成了MyISAM,而不是期望的InnoDB。我的代碼是在用到batch的時候(Session.flush())才出的錯,查了查MyISAM的資料,應(yīng)該就是這個了。
編輯了etc/mysql/my.cnf,在[mysqld]下面追加了
default-storage-engine=INNODB。
PS:在win下我不記得有配過這個設(shè)置,有可能是操作系統(tǒng)的默認(rèn)引擎不一樣,回公司的時候查一下吧:)
另外忘了改Default Character Set,也需要變成UTF-8才可以:
default-character-set=utf8
PS:需要把原DB刪掉重建才管用。