SchemaUpdate的Hibernate迁移

时间:2019-04-09 10:25:39

标签: java postgresql hibernate

我遇到了一个非常奇怪的案例。

我已经使用了单独的时间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.finalSchema Migration api was changed),所以我使用了新的API(在上一节的注释中): / p>

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

但这不会自动创建我的架构,只有手动创建该架构,它才会创建我的表。

我正在使用Postgres数据库,并检查了数据库用户角色是否具有所有正确的权限。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

最有可能出现错误进行架构更新。 要查看它们,请启用特殊标志:

SchemaUpdate update = new SchemaUpdate();
update.setHaltOnError(true);