Ведение моделей Spring JPA для одной и той же таблицы в другой базе данных (одна и та же таблица в Oracle и MySQL) - PullRequest
0 голосов
/ 28 июня 2019

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

Основная проблема, с которой я сталкиваюсь, касается генерации первичного ключа.

  1. В Oracle я использую последовательности.
    @Id
    @SequenceGenerator(name = "MY_SEQ", sequenceName = "MY_SEQ", allocationSize = 2)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MY_SEQ")
    private Long id;
В Mysql я использую автоинкремент (Oracle не поддерживает его)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

Есть ли способ, которым я могу установить эту стратегию динамически в зависимости от того, какая база данных настроена?Я не хочу иметь дубликаты моделей только для этой цели.Конечно, дайте мне знать, если я иду в неоптимальном направлении

1 Ответ

1 голос
/ 28 июня 2019

Согласно документации SEQUENCE также должен работать с базами данных, в которых нет последовательностей.

2.6.9. Использование последовательностей

Для реализации генерации значения идентификатора на основе последовательности базы данных Hibernate использует его org.hibernate.id.enhanced.SequenceStyleGenerator id генератор. это Важно отметить, что SequenceStyleGenerator способен работать против баз данных, которые не поддерживают последовательности, переключаясь на таблица в качестве основы. Это дает Hibernate огромную степень переносимость между базами данных при сохранении согласованного идентификатора поведение поколения (в отличие от, скажем, выбора между SEQUENCE и IDENTITY). Это резервное хранилище полностью прозрачно для пользователя.

Недостатком является то, что он будет использовать не MySQL auto_increment, а таблицу базы данных.

Но если вам это нужно в течение ограниченного времени, почему бы не пойти по этому пути, а когда вам больше не нужен Oracle, переключитесь на auto_increment и IDENTITY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...