Автономная последовательность JPA

#java #sql #jpa #spring-data-jpa

#java #sql #jpa #spring-data-jpa

Вопрос:

С помощью SQL можно определить такую последовательность, как CREATE SEQUENCE sequence_name .

Можно ли ее определить с помощью JPA? Я знаю только последовательности, определенные в атрибутах объектов. Я бы хотел избежать создания объекта только для того, чтобы иметь возможность определять последовательность.

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

1. Как вы используете эту последовательность?

2. У меня есть устаревшая таблица (в плохой схеме БД), в которой мне нужно идентифицировать группы. Я могу сделать это с помощью group by, но чтобы упростить мои запросы и поскольку мне нужно добавлять новые группы программно, я решил добавить столбец group_id как поддельный 1: N. Мне нужна последовательность для автоинкрементирования, чтобы я мог использовать ее для генерации идентификаторов для новых групп записей.

3. Вы сказали, что вам не нравится создавать объект для последовательности, но у вас, похоже, уже есть объект с group_id в качестве столбца, не могли бы вы просто определить последовательность для этого поля, или я что-то неправильно понимаю?

4. Если бы они были уникальными, то да. Но из-за этого уродливого взлома несколько строк будут иметь один и тот же group_id. Если бы сущность для этой таблицы имела последовательность, связанную с атрибутом, она увеличивала бы последовательность с каждой добавленной строкой. Поэтому мне нужно программно установить group_id и увеличивать последовательность с каждой добавленной группой.

5. TBH Я бы не рекомендовал использовать генерацию схемы для «автономных» последовательностей. Или для генерации чего-либо вообще, если на то пошло. Вам было бы лучше использовать инструмент миграции БД, такой как Flyway или Liquibase

Ответ №1:

Вы можете попробовать создать ее при запуске. Из этой документации:

Spring Boot может автоматически создавать схему (сценарии DDL) вашего источника данных и инициализировать ее (сценарии DML). Он загружает SQL из стандартных корневых путей к классам: schema.sql и data.sql

Например, поместите создание ПОСЛЕДОВАТЕЛЬНОСТИ в data.sql

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

1. Спасибо, это правильное решение. Я бы хотел оставить вопрос без ответа, потому что я чувствую, что это должно быть реализовано в JPA.