Итак, я только что запустил приложение Spring Hibernate и, похоже, не могу правильно понять свой файл сопоставления. Я использую MySql 5 и ключ с автоматическим увеличением. Вот часть идентификатора моего файла сопоставления.
<hibernate-mapping>
<class name="org.XXXXXXX.Contact" table="contact">
<id name="id" column="id" type="int" unsaved-value="null">
<generator class="native" />
</id>
Вот сгенерированный SQL
вставить в контакт (title, first_name, middle_name, last_name, суффикс, job_title, dob, Passport_number, Passport_expiration, работодатель, диетические_ограничения, secondary_contact_fname, secondary_contact_lname, secondary_contact_mname, secondary_contact_title, secondary_contact_mname, secondary_contact_title, secondary_contact_suffix, Emergency_contact_suffix, Emer_contact_suffix), Emer_contact_suffix? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
Вот важная часть трассировки стека:
Org.hibernate.AssertionFailure: нулевой идентификатор в записи org.XXXXXXX.Contact (не сбрасывать сеанс после возникновения исключения)
Я попытался установить несохраненное значение на «0» и «-1» и отправить их по сети. Есть идеи о том, что я делаю неправильно?
2 ответа
Вы должны помнить, что Hibernate - это уровень постоянства и должен иметь возможность отслеживать, где находится объект в базе данных. Поэтому, когда он выполняет вставку, ему на самом деле нужно будет запросить счетчик автоинкремента, чтобы узнать, каким должен быть следующий идентификатор. Затем он вставляет идентификатор в объект и вставляет объект в базу данных. Итак, чтобы спящий режим выполнялся во вставке, он использует сначала необходимость выбора (если вы не используете какой-то GUID, сгенерированный приложением). При использовании автоинкремента mySQL используйте генератор «идентичности».
Объяснение различных генераторов:
http://www.roseindia.net/hibernate/hibernateidgeneratorelement.shtml
Фрагмент кода XML для гибернации:
<id name="id" type="long" unsaved-value="null" >
<column name="uid" not-null="true"/>
<generator class="identity"/>
</id>
Генератор «Приращения» не подходит для кластеров. Если какой-то другой процесс вставляется в ту же таблицу. Следующая вставка из спящего режима не удастся
Похожие вопросы
Связанные вопросы
Новые вопросы
hibernate
Hibernate - это библиотека объектно-реляционного отображения (ORM) для языка Java, позволяющая разработчикам использовать модели доменов в стиле POJO в своих приложениях способами, выходящими далеко за пределы объектно-реляционного отображения.