Как использовать последовательность в Hibernate как свойство в XML-отображении - PullRequest
4 голосов
/ 22 февраля 2011

Как использовать последовательность в отображениях XML Hibernate?

В документации упоминается элемент <generator>.Однако я хочу, чтобы последовательность была столбцом, а не идентификатором.

Ответы [ 2 ]

5 голосов
/ 23 февраля 2011

Я знаю, что при использовании Hibernate с Oracle идентификатор в файле отображения определяется примерно так:

<id name="id" column="item_id">
    <generator class="sequence">
        <param name="sequence">NAME_OF_YOUR_SEQUENCE</param>
    </generator>
</id>

Вы также можете указать класс генератора как "native", что удобно, если вы затем переключитесь наавтоинкрементный RDMS, такой как MySQL.Затем бит последовательности игнорируется в MySQL.

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

1 голос
/ 30 октября 2015

Если вы используете отдельную последовательность Oracle, Hibernate сначала запросит у БД следующее значение, а затем выполнит вставку (если вы не используете стратегию оптимизации, чтобы получить их часть).

Вы можете объединить эти два выполнения в одно, найдя значение, назначенное оракулом при вводе, изменив свой XML-файл hibernate, добавив в него следующее свойство:

   <property name="hibernateProperties">
        <props>
        ...
            <prop key="hibernate.jdbc.use_get_generated_keys">true</prop>
        ...
        </props>

И использование идентификатора последовательности в вашем столбце

     <generator class="sequence-identity">
        <param name="sequence">SEQ_NAME</param>
    </generator>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...