Весенняя загрузка PostgreSQL — hibernate_sequence не генерируется

#java #postgresql #spring-boot

#java #postgresql #весенняя загрузка

Вопрос:

  • Java 11
  • Весенняя загрузка 2.2.4.ВЫПУСК
  • PostgreSQL 42.4.9

Я проводил исследования с помощью Stack Overflow и других источников и не смог найти ответ на свой вопрос.

В принципе, у меня есть приложение Spring Boot, и я пытаюсь сохранить объект в базе данных PostgreSQL. При попытке сохранить объект я получаю сообщение об ошибке hibernate_sequence не существует.

ERROR: relation "<schema>.hibernate_sequence" does not exist

Вот моя сущность, которая обрабатывает генерацию идентификатора:

     @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, unique = true)
    private Long id;
 

Из моего файла application.properties:

 ######### uses denoted schema (this schema must exist in db or have a .sql file in resources dir that creates it)
spring.jpa.properties.hibernate.default_schema=cinc_student
######### required to make spring use the schema.sql file in resources dir (if not using this file, this can be removed)
spring.datasource.initialization-mode=always
######### prevents hibernate from recreating unique indexes each time the app is restarted.
spring.jpa.properties.hibernate.schema_update.unique_constraint_strategy=RECREATE_QUIETLY
 

Я использую файл schema.sql в разделе ресурсы со следующей строкой для создания схемы:

CREATE SCHEMA IF NOT EXISTS cinc_student

У меня есть две тестовые базы данных, на которые я указываю своему приложению локально. В одной из баз данных схема и hibernate_sequence были сгенерированы автоматически без проблем.

В другой БД схема была создана, но последовательность не была сгенерирована. Никакой разницы в коде вообще, просто указание на разные недавно созданные пустые локальные базы данных.

Кто-нибудь может объяснить?

Я не использую @GenerateSequence, потому что я хочу, чтобы он использовал значение hibernate_sequence по умолчанию, которое должно быть сгенерировано из коробки. Я не буду создавать последовательность действий вручную.

Комментарии:

1. Что вы используете для создания схемы? Вы используете DDL-функцию hibernate или что-то в этом роде flyway ?

2. Я использую sql-файл в разделе ресурсов «schema.sql». CREATE SCHEMA IF NOT EXISTS cinc_student

Ответ №1:

Добавьте следующее в application.properties . Это скажет Spring использовать диалект Postgre, который автоматически создаст hibernate_sequence при запуске приложения.

 spring.jpa.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
 

Комментарии:

1. Спасибо, но это не решает проблему. У меня уже было это в моем application.properties. Это происходит крайне периодически. Большую часть времени работает так, как и должно быть.