У меня есть сущность, которая сохраняется в схеме Oracle. В вставке DB триггер генерирует идентификатор объекта с использованием последовательности БД. С помощью триггера обязательно, так как он также обновляет другую таблицу рядом с последовательностью генерации идентификатора (вид таблицы журналов), что важно для устаревших компонентов.Oracle before-insert trigger и Hibernate id generator setting
Как настроить генератор идентификаторов Hibernate в сопоставлении объектов?
Оглядевшись в подобных вопросах StackOverflow, я нашел некоторые решения, которые не вписываются в моем случае:
- Используя последовательность непосредственно:
<generator class="sequence">...</generator>
. Это невозможно, потому что остальная часть кода запуска не будет выполнена - Использование
<generator class="select">...</generator>
, что означает, что после вставки Hibernate выбирает объект с использованием другого уникального свойства (согласно руководству Hibernate-3.3 5.1.4.6.). Это также невозможно здесь, потому что нет другого уникального столбца, и использование набора свойств не поддерживается. - Использование
<generator class="assigned">...</generator>
и установка поддельного идентификатора перед вызовомsave()
. Этот идентификатор будет проигнорирован триггером DB, и в результате в результате строки DB будет иметься правильный ID. Тем не менее, мой экземпляр Java не будет иметь, и это решение требует уродливости, поскольку оно делает предположения о реализации триггера.
Есть ли хорошее решение этой проблемы?
Что означает личность? Он возвращает вставленный идентификатор – Firo
Что-то звучит с помощью этого триггера БД. Его нужно записать, чтобы получить только значение последовательности, если оно не указано во вставке, например, 'IF: new .pk_id IS NULL THEN SELECT my_seq.NEXTVAL INTO: new.pk_id FROM DUAL; END IF; '- тогда остальная часть триггера может использовать идентификатор, независимо от того, была ли она предоставлена триггером или спящим режимом. –
OK, извините, никогда ответив на это: @Firo: 'identity 'не поддерживается для Oracle (http://www.roseindia.net/hibernate/hibernateidgenera torelement.shtml) – rainer198