18

我的实体中有一个布尔属性。这是我的注释:

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

4

2 回答 2

38

Try using BOOLEAN data type, define your @Column annotation like that:

@Column(name = "IS_ACTIVE", columnDefinition = "boolean default true", nullable = false)
private Boolean active = true;
于 2012-11-27T22:13:39.933 回答
2

参考此链接中的正确答案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)

于 2014-04-30T10:12:36.033 回答