【问题标题】:Hibernate does not generate sequences when update value is provided to the property spring.jpa.hibernate.ddl-auto for Postgres DBs当为 Postgres DB 的属性 spring.jpa.hibernate.ddl-auto 提供更新值时,Hibernate 不会生成序列
【发布时间】:2020-04-11 19:31:38
【问题描述】:

当我使用 spring.jpa.hibernate.ddl-auto=create 时,会同时创建序列和表,但是当此属性设置为更新时,只会创建表。我已经创建了一个 Spring Boot 应用程序,对于 DB,我正在使用 Postgres。但是当我为 h2 数据库(嵌入的)检查相同的内容时,也会为更新值创建序列和表。我无法设置要创建的属性,因为它会在应用程序重新启动时删除表。有人可以启发我吗? 提前致谢。

【问题讨论】:

    标签: java postgresql hibernate spring-boot h2


    【解决方案1】:
    【解决方案2】:

    hibernate 中存在与 Postgres 方言相关的错误。下面是 PostgresSQLDialect 中检查模式中是否存在序列的方法(顺便说一句,这是错误的):

    @Override
        public String getQuerySequencesString() {
            return "select relname from pg_class where relkind='S'";
        }
    

    如果数据库中的任何模式中存在任何序列,则上述查询将返回序列。如果有任何模式包含任何序列,它不会在该数据库的指定模式中创建序列。为了解决这个问题,我编写了一个自定义 Postgres 方言并将查询更改为以下内容:

    @Override
    public String getQuerySequencesString() {
        return "select sequencename from pg_catalog.pg_sequences where schemaname='"+schemaName+"'";
    }
    

    解决了 ddl-auto 设置为更新时的问题。现在正在创建序列。

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 1970-01-01
      • 2011-09-25
      • 2019-05-02
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      相关资源
      最近更新 更多