在休眠中设置属性的默认值不起作用

我的实体中有一个布尔属性。以下是我对它的注释:

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

但工作并不完美。以下是我为生成的表获得的结果的SQL代码:columnDefinition="BIT DEFAULT 1"

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,如果它很重要。如果有任何帮助,我将不胜感激。提前致谢!


答案 1

尝试使用数据类型,像这样定义注释:BOOLEAN@Column

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

答案 2

引用此链接中的正确答案 如何在休眠中设置默认值

如果需要实际的数据库默认值,请使用 columnDefinition - @Column(name = “myColumn”, nullable = false, columnDefinition = “int default 100”)。请注意,列定义中的字符串与数据库相关。此外,如果选择此选项,则必须使用动态插入,因此Hibernate不会在插入时包含具有空值的列。否则,谈论默认是无关紧要的。

解决方案的关键是动态插入批注。您可以将其添加到实体类中,如以下示例所示:@org.hibernate.annotations.Entity(dynamicInsert = true)


推荐