我的实体中有一个布尔属性。这是我对它的注释:
@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。我会非常感谢任何帮助。提前谢谢!
答案 0 :(得分:31)
尝试使用BOOLEAN
数据类型,定义您的@Column
注释:
@Column(name = "IS_ACTIVE", columnDefinition = "boolean default true", nullable = false)
private Boolean active = true;
答案 1 :(得分:0)
参考此链接How to set default value in Hibernate
中的正确答案如果您想要一个真正的数据库默认值,请使用columnDefinition - @Column(name =“myColumn”,nullable = false,columnDefinition =“int default 100")。请注意,columnDefinition中的字符串与数据库有关。此外,如果选择此选项,必须使用动态插入,因此Hibernate不会在插入时包含空值的列。否则谈论违约是无关紧要的。
解决方案的关键是动态插入注释。您可以将其添加到您的实体类中,例如:@org.hibernate.annotations.Entity(dynamicInsert = true)