Как экспортировать схему после обновления Hibernate до 5.4.1? - PullRequest
0 голосов
/ 21 февраля 2019

Я недавно обновил Hibernate с 4.3.7 до 5.4.1, а API SchemaExport изменился с 5.1.Этот код теперь показывает проблемы компиляции (в конструкторе SchemaExport и методе execute).

/**
 * Method to generate a SQL script which aim is to create SQL tables for the
 * entities indicated as parameters.
 */
private void generateScript(Class<?>... classes) {
    Configuration configuration = new Configuration();
    configuration.setProperty(Environment.DIALECT, entityManagerFactory.getProperties().get(DIALECT_PROPERTY).toString());
    for (Class<?> entityClass : classes) {
        configuration.addAnnotatedClass(entityClass);
    }
    SchemaExport schemaExport = new SchemaExport(configuration);
    schemaExport.setDelimiter(SCRIPT_DELIMITER);
    schemaExport.setOutputFile(getScriptPath());
    schemaExport.setFormat(true);
    boolean consolePrint = false;
    boolean exportInDatabase = false;
    schemaExport.execute(consolePrint, exportInDatabase, false, true);
}

Я видел другие вопросы, связанные с этой проблемой, но не настолько конкретные, чтобы помочь мне переписать эту функцию.

1 Ответ

0 голосов
/ 28 марта 2019

Вот что я сделал, и это работает:

private void genererScript(Class<?>... classes) {

    StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
            .applySetting(Environment.DIALECT, entityManagerFactory.getProperties().get(DIALECT_PROPERTY).toString())
            .build();

    MetadataSources sources = new MetadataSources( standardRegistry );
    for (Class<?> entityClass : classes) {
        sources.addAnnotatedClass(entityClass);
    }

    MetadataImplementor metadata = (MetadataImplementor) sources
            .getMetadataBuilder()
            .build();

    EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.SCRIPT);

    try {
        Files.delete(Paths.get(getScriptPath()));
    } catch (IOException e) {
        /*
         * The file did not exist...
         * we do nothing.
         */
    }

    SchemaExport schemaExport = new SchemaExport();
    schemaExport.setDelimiter(SCRIPT_DELIMITER);
    schemaExport.setOutputFile(getScriptPath());
    schemaExport.setFormat(true);
    schemaExport.createOnly(targetTypes, metadata);
}
...