Переход в спящий режим для SchemaUpdate - PullRequest
2 голосов
/ 09 апреля 2019

Я столкнулся с действительно странным случаем.

Я использовал в одиночку hibernate-core версию 5.0.11.final, одна из вещей, которые я сделал в своем коде, - это создание вручнуюбаза данных с новой схемой и таблицами:

@Service
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CreateSchemaService implements InitializingBean {
    @Autowired
    private DataSourceProperties dataSourceProperties;

    @Override
    public void afterPropertiesSet() throws Exception {
        StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(getProperties())
                .build();

        MetadataImplementor metadata = (MetadataImplementor) new MetadataSources(serviceRegistry)
                .addAnnotatedClass(Pishoto.class)
                .buildMetadata();

        // Hibernate 5.3.9 Migration
        // EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.DATABASE, TargetType.STDOUT);
        // new SchemaUpdate().execute(targetTypes, metadata, serviceRegistry);

        // Hibernate 5.0.11
        new SchemaUpdate(serviceRegistry, metadata).execute(true, true);
    }

    private Map<String, String> getProperties() {
        Map<String, String> properties = new HashMap<>();

        properties.put(Environment.URL, dataSourceProperties.getUrl());
        properties.put(Environment.USER, dataSourceProperties.getUsername());
        properties.put(Environment.PASS, dataSourceProperties.getPassword());
        properties.put(Environment.DEFAULT_SCHEMA, "hibernate_poc");
        properties.put(Environment.HBM2DDL_AUTO, "none");
        properties.put(Environment.NON_CONTEXTUAL_LOB_CREATION, "true");
        properties.put(Environment.DRIVER, dataSourceProperties.getDriverClassName());

        return properties;
    }
}

При обновлении до версии 5.3.9 мне пришлось изменить некоторый код (так как версия 5.1.0.final API Schema Migration была изменена ), поэтому я использовал новый API (в комментарии в предыдущем разделе):

EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.DATABASE, TargetType.STDOUT);
new SchemaUpdate().execute(targetTypes, metadata, serviceRegistry);

Но это больше не создает мою схему автоматически, только если схема создается вручную, тогда он будет создавать мои таблицы.

Я использую Postgres db и проверил, что у роли пользователя db есть все необходимые разрешения.

Есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...