Hibernate @GeneratedValue не генерирует первичный ключ перед сохранением сущности - PullRequest
0 голосов
/ 07 ноября 2011

Я создал приложение для шва с Hibernate (по умолчанию) провайдером ORM.Сохраняя сущность, она выдает следующую ошибку:

Caused by: java.sql.SQLException: Field 'COUNTRY_ID' doesn't have a default value
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)

Выдается, потому что первичный ключ не генерируется Hibernate до сохраняющейся сущности.

@Entity
@Table(name = "country")
public class Country implements java.io.Serializable {

private Integer countryId;
//other instance variables...

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "COUNTRY_ID", unique = true, nullable = false)
public Integer getCountryId() {
return this.countryId;
}

public void setCountryId(Integer countryId) {
this.countryId = countryId;
}

Когда я вносю изменения в 'Страна'Table, то есть сделать COUNTRY.COUNTRY_ID как AUTO_INCREMENT (база данных MySQL), тогда приведенный выше код сохраняется для объекта Country.Даже после попытки стратегии

@GeneratedValue(strategy = GenerationType.IDENTITY)

возникает ошибка, если я не сделаю COUNTRY_ID как AUTO_INCREMENT.

Итак, необходимо ли, чтобы первичные ключи были сделаны с автоматическим приращением в таблице?Почему Hibernate не создает уникальный первичный ключ (используя алгоритм HiLo) перед сохранением сущности, если первичный ключ не помечен как AUTO_INCREMENT в таблице базы данных.

Заранее спасибо.

С уважением

1 Ответ

1 голос
/ 07 ноября 2011

GenerationType.AUTO означает, что hibernate выберет стратегию генерации в зависимости от возможностей базы данных: для MySQL будет выбрана стратегия идентификации.В вашем случае указание GenerationType.AUTO совпадает с GenerationType.IDENTITY.

В свою очередь, GenerationType.IDENTITY требует автоматического увеличения значения для столбца идентификатора.

Вам следует попробовать другие стратегии, есливы хотите, чтобы hibernate присваивал значения вашему столбцу id: например, hilo.Но разрешение назначать значения hibernate для столбцов id рекомендуется только для тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...