#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. Это происходит крайне периодически. Большую часть времени работает так, как и должно быть.