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

问题描述 投票:0回答:3

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

@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。我将非常感谢任何帮助。预先感谢!

java hibernate jpa hibernate-mapping hibernate-annotations
3个回答
38
投票

尝试使用

BOOLEAN
数据类型,定义您的
@Column
注释,如下所示:

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

2
投票

参考此链接中的正确答案如何在 Hibernate 中设置默认值

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

解决方案的关键是动态插入注释。您可以将其添加到实体类中,如下例所示:

@org.hibernate.annotations.Entity(dynamicInsert = true)


0
投票

验证实体类中布尔属性的默认值是否设置为 false。确保你有这样的东西:

私有布尔值 yourBooleanAttribute = false;

您可以在实体类中使用@Column注释显式指定列定义。确保在生成的 SQL 中指定 columnDefinition 属性以将默认值设置为 false:

@Column(columnDefinition = "布尔值默认 false") 私有布尔值 yourBooleanAttribute;

© www.soinside.com 2019 - 2024. All rights reserved.