VladとGunnarによる回答のおかげで、新しい構成 API を使用して、次の同等のエクスポート ロジックを生成する方法を見つけることができました。もちろん、歴史はこの API が再び壊れることを示しているので、必ず適切なバージョンを選択してください:
休止状態 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 (警告なし):
上記はいくつかの厄介な警告を生成しますが、無視することもできます:
Okt 20, 2016 2:57:16 PM org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator initializeService
WARN: HHH000181: アプリケーションが接続を提供すると仮定すると、適切な接続プロバイダーが見つかりません
2016 年 10 月 20 日 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;
}
})
休止状態 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);