генерировать идентификатор для сопоставления таблиц в спящем режиме - PullRequest
0 голосов
/ 20 августа 2011

Здравствуйте, у меня есть таблица в базе данных DB2:

id (PKey) doc_id (FKey указывает на id) не нуль

Это странная устаревшая таблица, которую я не могу изменить. Я также не могу написать / изменить триггеры.

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

У меня есть два варианта: 1 - скажите Hibernate, чтобы оставить id и doc_id как ноль, тогда триггер установит значения для меня.

2 - выяснить, как указать hibernate использовать последовательность для одновременной установки значений для обоих значений.

Кажется, я не могу найти способ заставить спящий режим сделать это?

любая помощь очень ценится.

<id name="id" type="java.lang.Long" column="ID">
        <generator class="sequence">
            <param name="sequence">SQ_DCMNT</param>
        </generator>
</id>

<property name="packageDcmntId" generated="insert">
        <column name="PACKAGE_DCMNT_ID" not-null="true"/>
</property>

1 Ответ

1 голос
/ 20 августа 2011

Я бы настроил эту сущность на использование собственного подкласса SequenceGenerator или SequenceHiLoGenerator для генерации его идентификатора.Этот пользовательский подкласс переопределяет метод генерирования следующим образом:

@Override
public Serializable generate(final SessionImplementor session, Object obj) {
    Serializable result = super.generate(session, obj);
    ((MyBizarreEntity) obj).setPackageDcmntId((Long) result);
    return result;
}

Таким образом, свойство сущности будет автоматически иметь значение сгенерированного идентификатора перед выполнением вставки, что необходимо, поскольку столбецне пустое ограничение.

Я не проверял его, но он должен работать.

Или вы можете просто использовать генератор регулярной последовательности для идентификатора, убедитесь, что тип доступа свойство , а не поле , и реализуйте метод setId следующим образом:

/**
 * Sets the ID as well as the packageDcmntId, since they share the same value
 */
public void setId(Long id) {
    this.id = id;
    this.packageDcmntId = id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...