Я столкнулся с действительно странным случаем.
Я использовал в одиночку 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 есть все необходимые разрешения.
Есть идеи?