#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.