Среда:
Версия Spring Boot: 3.2.1 с Hibernate-Core 6.4.1.Final
Также протестировано с версией 3.3.1 с Hibernate-Core 6.5.2.Final
База данных: MS SQL Server с несколькими доступными базами данных
Проблема :
У меня есть установка, в которой мне нужно сопоставить последовательность с полем @Id объекта с помощью аннотаций @GeneratedValue и @SequenceGenerator. Сама сущность сопоставляется с базой данных A (это представление), но последовательность, на которую она опирается, находится в базе данных B (которая также хранит таблицу). Я указываю параметры «каталог» и «схема» в аннотации @SequenceGenerator, чтобы указать правильное расположение последовательности в базе данных B.
Когда я настраиваю свой Spring Boot API с помощью Spring. jpa.hibernate.ddl-auto настроен на проверку, Hibernate выдает ошибку при запуске (из класса AbstractSchemaValidator), указывая, что он не может найти последовательность. Кажется, он запрашивает только INFORMATION_SCHEMA.SEQUENCES базы данных, для которой открыто соединение, а не проверяет все указанные каталоги в сопоставлениях объектов.
Переключение ddl-auto на none позволяет избежать этого. ошибка при запуске, и приложение работает нормально, последовательность правильно используется во время выполнения.
Ожидаемое поведение:
Hibernate должен правильно найти последовательность в базе данных B, если каталог и схема правильно указаны в аннотации @SequenceGenerator, даже если ddl-auto настроен на проверку.
Фактическое поведение:
Hibernate не может найти последовательность, если для ddl-auto не установлено значение none, что позволяет предположить, что он не полностью учитывает настройки каталога в средах с несколькими базами данных во время проверки схемы. Выдается сообщение об ошибке:
Проверка схемы: отсутствует последовательность ["B.schema_from_B.my_sequence"]
Пример кода:
@Getter
@Setter
@Entity
@Table(name = "my_view", schema = "schema_from_A", catalog = "A")
public class ViewEntity {
@Id
@GeneratedValue(strategy = SEQUENCE, generator = "my_seq_generator")
@SequenceGenerator(name = "my_seq_generator", catalog = "B", schema = "schema_from_B", sequenceName = "my_sequence")
@Column(name = "id")
private Integer id;
}
Конфигурация YML:
Вот фрагмент моей конфигурации
spring:
datasource:
url: jdbc:sqlserver://;databaseName=A;encrypt=true;trustServerCertificate=true
jpa:
properties:
hibernate:
default_catalog: A
default_schema: my_schema_A
hibernate:
ddl-auto: validate
Подробнее здесь: https://stackoverflow.com/questions/787 ... ver-when-d
Hibernate не находит последовательность в нескольких базах данных одного и того же сервера, когда ddl-auto настроен на п ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Не загрязняет ли установка Spring.jpa.hibernate.ddl-auto=create-drop мой контекст?
Anonymous » » в форуме JAVA - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-