我的環境:MySql5、Hibernate5.2.11Final。
首先,用SchemaExport自動創建表,Hibernate5.2.11Final的寫法如下:
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
SchemaExport schemaExport = new SchemaExport();
schemaExport.create(EnumSet.of(TargetType.DATABASE), metadata);
執行後hibernate自動生成如下SQL語句:
create table Score (
studID integer not null,
CourseID integer not null,
result float,
primary key (studID, CourseID)
) type=MyISAM
查看數據庫,表卻並沒有創建,而且執行hibernate的crud會出現”could not execute statement“的錯誤,並提示沒有查找到表。因此可以確定,在自動創建表的過程中出現問題。
於是把上面create table的sql語句放入navicat執行,報錯提示錯誤出現在type=MyISAM附近。
上網一查,原來是sql版本問題,在sql4時可以寫成type=MyISAM,但sql5變成了engine=MyISAM,因此猜測hibernate不知道我用的是sql5,於是更改cfg文件如下:
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
將方言設置爲MYSQL5,加一個5進去。hibernate就能自動生成基於sql5的sql語句,執行測試單元,重啓navicat查看,表成功創建。