Благодаря ответам Влада и Гуннар, мне удалось найти способ с помощью нового 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 (без предупреждений):
Вышеприведенное приведет к некоторым неприятным предупреждениям, которые можно игнорировать:
20 октября 2016 г. 14:57:16 org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator InitialService
ПРЕДУПРЕЖДЕНИЕ: HHH000181: не найден подходящий провайдер подключения, предполагается, что приложение будет предоставлять подключения
20 октября , 2016 14:57:16 org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator InitialService
ПРЕДУПРЕЖДЕНИЕ: 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);
person
Lukas Eder
schedule
26.08.2015