创建版本5 Hibernate SchemaExport对象的方式与框架的早期版本明显不同。 但这并不是很难。 这是您的操作方式。
Hibernate和JPA数据库设置
首先,将所有数据库属性推送到HashMap或Hashtable中 :
Map<String, String> settings = new HashMap<>();
settings.put(" connection.driver_class ", "com.mysql.jdbc.Driver" );
settings.put( "dialect", "org.hibernate.dialect.MySQLDialect" );
settings.put( "hibernate.connection.url", "jdbc:mysql://localhost/hibernate_examples" );
settings.put( "hibernate.connection.username", "root" );
settings.put( "hibernate.connection.password", "password" );
Hibernate SchemaExport ServiceRegistry创建
然后,使用以下数据库设置创建ServiceRegistry对象:
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings(settings).build();
配置Hibernate元数据
您需要将所有实体bean告诉Hiberante SchemaExport类,这是通过MetadataSources对象完成的:
MetadataSources metadata = new MetadataSources(serviceRegistry);
//metadata.addAnnotatedClass(Player.class);
设置TargetType和Action枚举
然后有几个注释起作用。 TargetType允许您指示SchemaExport类以数据库为目标,而不仅仅是将数据库创建SQL写入脚本。 通过Action枚举,您可以指定是创建数据库,删除数据库还是同时执行两者。 将这两个枚举提供给Hibernate SchemaExport类的execute方法,JBoss框架将创建JPA实体所需的各种数据库表和列,以将其状态持久化到Java应用程序的范围之外。
EnumSet<TargetType> enumSet = EnumSet.of( TargetType.DATABASE );
SchemaExport schemaExport = new SchemaExport();
schemaExport.execute(enumSet, Action.BOTH , metadata.buildMetadata());
要注意的一件事是,用于创建Hibernate 5 SchemaExport的过程与用于获取EntityManager的Hibernate SessionFactory的创建非常相似:
Configuration configuration = new Configuration();
configuration.configure();
SessionFactory sessionFactory =
configuration.buildSessionFactory(serviceRegistry);
sessionFactory.getCurrentSession();
版本5 Hibernate SchemaExport示例
这是一个带有main方法的完整类的完整外观,该类使Hibernate 5 SchemaExport执行调用来创建数据库表:
package com.mcnz.jpa.examples;
import java.util.*;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.hbm2ddl.SchemaExport.Action;
import org.hibernate.tool.schema.TargetType;
public class MyDatabaseWizard {
public static void main(String[] args) {
Map<String, String> settings = new HashMap<>();
settings.put("connection.driver_class",
"com.mysql.jdbc.Driver");
settings.put("dialect",
"org.hibernate.dialect.MySQLDialect");
settings.put("hibernate.connection.url",
"jdbc:mysql://localhost/hibernate_examples");
settings.put("hibernate.connection.username", "root");
settings.put("hibernate.connection.password", "password");
settings.put("hibernate.show_sql", "true");
settings.put("hibernate.format_sql", "true");
ServiceRegistry serviceRegistry =
new StandardServiceRegistryBuilder().applySettings(settings).build();
MetadataSources metadata =
new MetadataSources(serviceRegistry);
metadata.addAnnotatedClass(Player.class);
EnumSet<TargetType> enumSet = EnumSet.of(TargetType.DATABASE);
SchemaExport schemaExport = new SchemaExport();
schemaExport.execute(enumSet, Action.BOTH, metadata.buildMetadata());
//Configuration configuration = new Configuration();
//configuration.configure();
//SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
//sessionFactory.getCurrentSession();
}
}