Spring + Hibernate: как настроить настраиваемый ПК-генератор? - PullRequest
1 голос
/ 08 октября 2008

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

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

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

Еще одно ограничение, налагаемое на меня, заключается в том, что эти PK вписываются в 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>

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

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

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 октября 2008

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

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

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

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

0 голосов
/ 08 октября 2008

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

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

и сделайте что-то вроде

insert VALUES('Sys1' || to_char(sequence.nextval), val1, val2, val3);
insert VALUES('Sys2' || to_char(sequence.nextval), val1, val2, val3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...