多亏了Vlad和Gunnar的回答,我设法通过新的配置API找到了自己的方法,以产生与以下内容等效的导出逻辑。当然,历史记录表明该API会再次中断,因此请确保选择适当的版本:
Hibernate 5.2:
metadataSources metadata = new metadataSources( new StandardServiceRegistryBuilder() .applySetting("hibernate.dialect", "org.hibernate.dialect.H2Dialect") .applySetting("javax.persistence.schema-generation-connection", connection) .build());// [...] adding annotated classes to metadata here...metadata.addAnnotatedClass(...);SchemaExport export = new SchemaExport();export.create(EnumSet.of(TargetType.DATAbase), metadata.buildmetadata());Hibernate 5.2(无警告):
上面的代码会产生一些讨厌的警告,可以将其忽略:
2016年10月20日,下午2:57:16
org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator
initializeService
警告:HHH000181:未遇到合适的连接提供者,假设应用程序将提供连接
Okt 20,2016 2:57:16 PM
org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator
initializeService警告:HHH000342:无法获取与查询元数据的连接:应用程序必须提供JDBC连接
…或者您可以通过以下
ConnectionProvider设置来解决这些问题(我认为这不是必需的)
.applySetting(AvailableSettings.CONNECTION_PROVIDER, new ConnectionProvider() { @Override public boolean isUnwrappableAs(Class unwrapType) { return false; } @Override public <T> T unwrap(Class<T> unwrapType) { return null; } @Override public Connection getConnection() { return connection; // Interesting part here } @Override public void closeConnection(Connection conn) throws SQLException {} @Override public boolean supportsAggressiveRelease() { return true; } })Hibernate 5.0:
metadataSources metadata = new metadataSources( new StandardServiceRegistryBuilder() .applySetting("hibernate.dialect", "org.hibernate.dialect.H2Dialect") .build());// [...] adding annotated classes to metadata here...metadata.addAnnotatedClass(...);SchemaExport export = new SchemaExport( (metadataImplementor) metadata.buildmetadata(), connection // pre-configured Connection here);export.create(true, true);休眠4:
提醒一下,这是Hibernate 4中的工作方式:
Configuration configuration = new Configuration() .setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");// [...] adding annotated classes to metadata here...configuration.addAnnotatedClass(...);configuration.generateSchemaCreationscript( Dialect.getDialect(configuration.getProperties()));SchemaExport export = new SchemaExport(configuration, connection);export.create(true, true);


