一段hibernate的SchemaExport,原來在win下運行正常,放到linux下就出了問題,在插入數據的時候發生了異常:
上網搜,都是說主鍵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刪掉重建才管用。
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的問題,后來才想到人家才不會那么耦合:P2009-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
上網搜,都是說主鍵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刪掉重建才管用。