Spring + Hibernate: как получить настраиваемый генератор PK?

Мы используем Spring + Hibernate для веб-приложений.

Это веб-приложение будет развернуто на двух не связанных между собой производственных площадках. Эти два производственных сайта будут использовать Webapp для параллельной генерации и использования данных Person.

Что мне нужно сделать, так это убедиться, что все люди, созданные на этих двух несвязанных производственных сайтах, имеют разные PK, чтобы мы могли объединить данные Person с этих двух сайтов в любое время.

Еще одно ограничение, наложенное на меня, заключается в том, что эти ПК подходят для Long, поэтому я не могу использовать UUID.

Что я пытаюсь сделать, так это изменить текущее отображение гибернации, которое имеет последовательность S_PERSON в качестве генератора:

<hibernate-mapping default-cascade = "save-update" auto-import = "false">
    <class name = "com.some.domain.Person" abstract = "true">
        <id name = "id">
            <column name = "PERSON_ID"/>
            <generator class = "sequence">
                <param name = "sequence">S_PERSON</param>
            </generator>
        </id>
    ...
</hibernate-mapping>

во что-то настраиваемое, чтобы PERSON_ID создавал свои PK из разных последовательностей (возможно, S_PERSON_1 и S_PERSON_2) в зависимости от файлов конфигурации Spring сайта развертывания.

Конечно,

            <generator class = "sequence">
                <param name = "sequence">${sequenceName}</param>
            </generator>

не работает, поэтому мне нужно выяснить кое-что еще ... Я думаю, мой генератор должен указывать на настраиваемый bean-компонент, который, в свою очередь, указывает на последовательность или другой, но я не могу понять, как это сделать ...

Есть идеи или обходной путь?

Спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 451
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать последовательности в обеих производственных системах, но определять их по-разному:

Производственная система 1: СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ имя_последовательности НАЧАТЬ С 1 УВЕЛИЧЕНИЕМ НА 2;

Производственная система 2: СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ имя_последовательности НАЧАТЬ С 2 УВЕЛИЧЕНИЕМ НА 2;

Первая последовательность будет генерировать только нечетные числа, вторая - только четные.

Да, это мой текущий вариант. Проблема с этим решением в том, что оно добавляет этап развертывания. Что я действительно хотел бы сделать, так это иметь две разные последовательности и настроить сопоставление так, чтобы оно указывало на последовательность один или последовательность два в существующих файлах конфигурации Spring.

Sébastien RoccaSerra 09.10.2008 11:43

В основном вам нужно убедиться, что значения ключей попадают в разные наборы. Итак, добавляем varchar с системным идентификатором.

Примечание: я не тестировал это, но вы сможете определить нормальную последовательность для каждой базы данных.

и сделай что-нибудь вроде

insert VALUES('Sys1' || to_char(sequence.nextval), val1, val2, val3);
insert VALUES('Sys2' || to_char(sequence.nextval), val1, val2, val3);

Другие вопросы по теме