Подтвердить что ты не робот

Не работает установка значения по умолчанию для свойства в Hibernate

У меня есть логическое свойство в моей сущности. Здесь мои аннотации к этому:

@Column(name = "IS_ACTIVE", nullable = false, columnDefinition="BIT DEFAULT 1", length = 1)
public Boolean getActive() {
    return isActive;
}

Но columnDefinition="BIT DEFAULT 1" не работает отлично. Вот код SQL, который я получаю как результат для сгенерированной таблицы:

IS_ACTIVE BIT(1) NOT NULL,

Что я делаю неправильно?

И поэтому, когда я пытаюсь сохранить экземпляр этого класса в базе данных, я получаю исключение:

`com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'IS_ACTIVE' cannot be null`

Если я удалю свойство nullable = false:

@Column(name = "IS_ACTIVE", columnDefinition="BIT DEFAULT 1", length = 1)
public Boolean getActive() {
    return isActive;
}

поэтому я могу сохранить созданный объект в этом случае. Но по-прежнему значение по умолчанию не установлено, и я получаю NULL в значении этого поля в базе данных.

Любые идеи, пожалуйста? Я использую MySQL Server 5.1, если это важно. Я был бы очень благодарен за любую помощь. Спасибо заранее!

4b9b3361

Ответ 1

Попробуйте использовать тип данных BOOLEAN, определите аннотацию @Column следующим образом:

@Column(name = "IS_ACTIVE", columnDefinition = "boolean default true", nullable = false)
private Boolean active = true;

Ответ 2

ссылка на правильный ответ в этой ссылке Как установить значение по умолчанию в Hibernate

Если вы хотите иметь реальное значение по умолчанию для базы данных, используйте columnDefinition - @Column (name = "myColumn", nullable = false, columnDefinition = "int default 100" ). Обратите внимание, что строка в столбцеDefinition зависит от базы данных. Также, если вы выберете этот параметр, , вам нужно использовать динамическую вставку, поэтому Hibernate не включает столбцы с нулевыми значениями для вставки. В противном случае говорить об умолчании не имеет значения.

Ключом решения является аннотирование динамической вставки. Вы можете добавить его в свой класс сущности в качестве примера: @org.hibernate.annotations.Entity(dynamicInsert = true)