Hibernate 5.x版本中SchemaExport的用法

Hibernate 5.x的版本中,SchemaExport的用法不同于以前的版本,而网上的诸多资料都还停留在以前的3.x, 4.x的API中,这里我简单说一下5.x版本中SchemaExport的用法。分别在5.0.1.Final版本、及5.1.0.Final版本中亲测有效。

一、5.0.1.Final

这个版本中的SchemaExport的API相对较复杂。参考如下:

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();

MetadataImplementor metadataImplementor = (MetadataImplementor)
new MetadataSources(serviceRegistry).buildMetadata();

SchemaExport export = new SchemaExport(serviceRegistry, metadataImplementor);
export.create(true, true);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

PS:上述代码片段,是本人之前在知乎中的回答,应该不算侵权。如下: 
https://www.zhihu.com/question/35168658

二、5.1.0.Final

知乎上有童鞋反应上述代码片段不能正常使用,本人特意去看了一下最新的5.1.0.Final的版本,发现SchemaExport的API又改了。@_@改得真频繁。 
新版本的API使用参考如下:

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
SchemaExport schemaExport = new SchemaExport();
schemaExport.create(EnumSet.of(TargetType.DATABASE), metadata);
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

也就是说,create的时候,通过TargetType类型的一个EnumSet,来控制SQL语句的去处。TargetType是一个枚举类型,定义如下:

public enum TargetType {
    /**
     * Export to the database.
     */
    DATABASE,
    /**
     * Write to a script file.
     */
    SCRIPT,
    /**
     * Write to {@link System#out}
     */
    STDOUT;
}

你可能感兴趣的:(Hibernate)