postgresqlspring-boothibernate-envers

REVINFO table is missing the sequence "revinfo_seq"


I am migrating to SpringBoot 3.0.1 and updated "hibernate-envers" version to "6.1.6.Final". My DB is PostgreSQL 13.6. Hibernate is configured to create the DB schema: spring.jpa.hibernate.ddl-auto:create

After starting the application I get the following error:

pim 2022-12-27 12:00:13,715 WARN  C#c7b942ec-33b4-4749-b113-22cbb2946a8d [http-nio-9637-exec-1]     SqlExceptionHelper/133              - SQL Error: 0, SQLState: 42P01
pim 2022-12-27 12:00:13,715 ERROR C#c7b942ec-33b4-4749-b113-22cbb2946a8d [http-nio-9637-exec-1]     SqlExceptionHelper/138              - ERROR: relation "revinfo_seq" does not exist
  Position: 16

The revinfo table look like this:

create table revinfo
(
    revision           bigint not null
        primary key,
    client_id          varchar(255),
    correlation_id     varchar(255),
    origin             varchar(255),
    request_id         varchar(255),
    revision_timestamp bigint not null,
    timestamp_utc      timestamp with time zone,
    user_name          varchar(255)
);

The sequence "revinfo_seq" does not exist, but in the old DB structure with envers

5.6.8.Final

and SpringBoot 2.6.6 it didn't exist either without any problems. What am i Missing?

I tried to toggle the paramter

org.hibernate.envers.use_revision_entity_with_native_id

but it did not help.


Solution

  • You can solve it with this property:

    spring.jpa.properties.hibernate.id.db_structure_naming_strategy: legacy

    Tested with Spring Boot 3.0.1

    Reason:

    Hibernate 6 changed the sequence naming strategy, so it was searching for a sequence ending with "_seq". You can read a really detailed explanation here: https://thorben-janssen.com/sequence-naming-strategies-in-hibernate-6/