我的实体中有一个布尔属性。这是我的注释:
@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。我将非常感谢任何帮助。预先感谢!
尝试使用
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 中的字符串与数据库相关。此外,如果您选择此值选项,你必须使用动态插入,因此 Hibernate 在插入时不包含具有空值的列。否则谈论默认值是无关紧要的。
解决方案的关键是动态插入注释。您可以将其添加到实体类中,如下例所示:
@org.hibernate.annotations.Entity(dynamicInsert = true)
验证实体类中布尔属性的默认值是否设置为 false。确保你有这样的东西:
私有布尔值 yourBooleanAttribute = false;
您可以在实体类中使用@Column注释显式指定列定义。确保在生成的 SQL 中指定 columnDefinition 属性以将默认值设置为 false:
@Column(columnDefinition = "布尔值默认 false") 私有布尔值 yourBooleanAttribute;