我遇到了一个非常奇怪的案例。
我已经使用了单独的时间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
是Schema Migration
api was changed),所以我使用了新的API(在上一节的注释中): / p>
EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.DATABASE, TargetType.STDOUT);
new SchemaUpdate().execute(targetTypes, metadata, serviceRegistry);
但这不会自动创建我的架构,只有手动创建该架构,它才会创建我的表。
我正在使用Postgres
数据库,并检查了数据库用户角色是否具有所有正确的权限。
有什么想法吗?
答案 0 :(得分:0)
最有可能出现错误进行架构更新。 要查看它们,请启用特殊标志:
SchemaUpdate update = new SchemaUpdate();
update.setHaltOnError(true);