Мы используем 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-компонент, который, в свою очередь, указывает на последовательность или другой, но я не могу понять, как это сделать ...
Есть идеи или обходной путь?
Спасибо!




Вы можете использовать последовательности в обеих производственных системах, но определять их по-разному:
Производственная система 1: СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ имя_последовательности НАЧАТЬ С 1 УВЕЛИЧЕНИЕМ НА 2;
Производственная система 2: СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ имя_последовательности НАЧАТЬ С 2 УВЕЛИЧЕНИЕМ НА 2;
Первая последовательность будет генерировать только нечетные числа, вторая - только четные.
В основном вам нужно убедиться, что значения ключей попадают в разные наборы. Итак, добавляем varchar с системным идентификатором.
Примечание: я не тестировал это, но вы сможете определить нормальную последовательность для каждой базы данных.
и сделай что-нибудь вроде
insert VALUES('Sys1' || to_char(sequence.nextval), val1, val2, val3);
insert VALUES('Sys2' || to_char(sequence.nextval), val1, val2, val3);
Да, это мой текущий вариант. Проблема с этим решением в том, что оно добавляет этап развертывания. Что я действительно хотел бы сделать, так это иметь две разные последовательности и настроить сопоставление так, чтобы оно указывало на последовательность один или последовательность два в существующих файлах конфигурации Spring.