jpa 在Hibernate中设置属性的默认值无效

mnemlml8  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(158)

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

@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服务器5.1,如果它是重要的。我将非常感激任何帮助。提前感谢!

ercv8c1e

ercv8c1e1#

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

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

yrwegjxp2#

参考此链接中的正确答案How to set default value in Hibernate
如果需要一个真实的数据库默认值,请使用columnDefinition - @Column(name =“myColumn”,nullable = false,columnDefinition =“int default 100”)。注意,columnDefinition中的字符串是依赖于数据库的。同样,如果你选择这个选项,你必须使用dynamic-insert,所以Hibernate在insert时不会包含空值的列。否则,谈论违约是无关紧要的。
解决方案的关键是动态插入标注。您可以将其添加到您的实体类中,如以下示例所示:@org.hibernate.annotations.Entity(dynamicInsert = true)

mtb9vblg

mtb9vblg3#

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

private boolean yourBooleanAttribute = false;

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

@Column(columnDefinition = "boolean default false")
private boolean yourBooleanAttribute;

相关问题