hibernate 不在空数据库上创建模式

Posted

技术标签:

【中文标题】hibernate 不在空数据库上创建模式【英文标题】:hibernate does not create schema on an empty databse 【发布时间】:2021-05-02 20:12:10 【问题描述】:

我有以下 hibernate.cfg.xml 文件

问题是,当我运行迁移时,没有在数据库中创建架构。我想从头开始创建架构。它只生成 script.sql 文件。

这是我的主应用程序文件

public class DatabaseMigration 


    public static void main(String[] args)

        StandardServiceRegistry s-s-r = new StandardServiceRegistryBuilder().configure("/META-INF/hibernate.cfg.xml").build();
        Metadata meta = new MetadataSources(s-s-r).getMetadataBuilder().build();

        SchemaExport schemaExport = new SchemaExport();
        schemaExport.setHaltOnError(true);
        schemaExport.setFormat(true);
        schemaExport.setDelimiter(";");
        schemaExport.setOutputFile("db-schema.sql");
        schemaExport.createOnly(EnumSet.of(TargetType.SCRIPT), meta);


【问题讨论】:

“当我运行迁移” - 你到底做了什么?你跑了什么代码? 【参考方案1】:

谢谢各位,我发现了错误。

schemaExport.createOnly(EnumSet.of(TargetType.SCRIPT), meta);是问题

目标仅指定 SCRIPT。

我已经用 DATABASE 替换了它,它可以工作。

【讨论】:

选择这个作为接受的答案,所以它显示为已解决。【参考方案2】:

如果你使用的是spring boot,你可以完全放弃hibernate.cfg文件,直接进入resources > application.properties文件,把这一行移到文件中:

spring.jpa.hibernate.ddl-auto=create

Hibernate 应该在您每次重新启动应用程序时重新创建架构。

【讨论】:

我没有使用弹簧靴。它是一个独立的应用程序。

以上是关于hibernate 不在空数据库上创建模式的主要内容,如果未能解决你的问题,请参考以下文章

为啥不在空的 Spark 集群上强制执行preferredLocations?

db.create_all() 在磁盘上但不在内存中创建模式

在 Postgresql 上创建模式时,Hibernate 忽略 @GeneratedValue

在 Hibernate 中绕过 GeneratedValue(合并不在数据库中的数据?)

空对象模式

如果 mysql 不存在 Hibernate 4 和 spring 4,则不会自动创建模式