Hibernate не заполняет столбец AUTO_INCREMENT, являющийся частью составного ПК, ошибка или анти-функция? - PullRequest
4 голосов
/ 15 февраля 2011

Я обнаружил проблему с Hibernate и составным ключом с автоматическим приращением одного из столбцов.

Я использую MySQL и первичный ключ, состоящий из 2 столбцов, GID и LANG. Столбец GID установлен как AUTO_INCREMENT. Вставка работает, hibernate вставляет новую строку, MySQL добавляет auto_generated id, когда GID равен нулю. Однако Hibernate не устанавливает поле GID в объекте, заданном для сохранения.

Я слышал о проблемах, обычно связанных с использованием составного первичного ключа в спящем режиме, поэтому я спрашиваю, является ли это ошибкой в ​​спящем режиме или антифункцией, оставленной разработчиками заранее (не будет реализована, поскольку нет)

Ответы [ 2 ]

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

Справочное руководство по Hibernate для 3.5.6-Final (раздел 2.2.3.2.4. Генерация частичного идентификатора) говорит, что можно использовать последовательности для части составного идентификатора.

2.2.3.2.4. Генерация частичного идентификатора

Hibernate поддерживает автоматический генерация некоторых идентификаторов свойства. Просто используйте @GeneratedValue аннотация на одном или несколько свойств id.

Внимание: Команда Hibernate всегда чувствовала такая конструкция, как принципиально неправильно. Старайтесь исправить вашу модель данных перед использованием этой функции.

(в документации есть пример!)

Но partenon тоже прав: справочный гид Hibernate (раздел 8.4. Компоненты как составные идентификаторы) для той же версии сказал, что это невозможно (для xml).

Вы не можете использовать IdentifierGenerator для генерации составных ключей. Вместо этого приложение должно назначить свои собственные идентификаторы.

Я не знаю, есть ли разница между аннотацией и отображением XML.

<irony> Я начинаю любить зимовать все больше и больше. </irony>

1 голос
/ 15 февраля 2011

Это не ошибка. Это желаемое поведение, как вы можете видеть в документации:

Вы не можете использовать IdentifierGenerator для генерации составных ключей. Вместо этого приложение должно назначить свои собственные идентификаторы.

http://docs.jboss.org/hibernate/stable/core/reference/en/html/components.html#components-compositeid

...