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

у меня есть логическое свойство в моей сущности. Вот мои примечания к нему:

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

но columnDefinition="BIT DEFAULT 1" doen не работает отлично. Вот код 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, если это важно. Я был бы очень благодарен за любую помощь. Заранее спасибо!

2 ответов


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

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

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

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

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