Я не уверен, какую версию Hibernate вы используете, но Hibernate в настоящее время поддерживает получение идентификатора, сгенерированного из триггера, через специальный генератор под названием select .
Короче говоря, вы можете добавить этот генератор в столбец идентификатора, а затем сослаться на естественный ключ, который можно использовать для получения идентификатора, сгенерированного триггером, следующим образом:
<id name="id" type="long" column="person_id">
<generator class="select">
<param name="key">socialSecurityNumber</param>
</generator>
</id>
Если в вашем сопоставлении уже определена запись натурального ключа, вам даже не нужно указывать параметр key
для генератора.
Одна проблема с этим конкретным генератором состоит в том, что вы можете использовать только одно свойство сущности в качестве ключа выбора для него. Если вам нужно выбрать с помощью составного ключа, то вам нужно будет создать собственный генератор для этой цели.
Вы можете расширить org.hibernate.id.SelectGenerator
или одного из его родителей, а затем реализовать выбор через несколько столбцов. Затем вы просто заменяете атрибут class
вышеупомянутой записи генератора на полное имя класса вашего нового генератора.