有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法在Hibernate中设置属性的默认值

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

@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;
}

在这种情况下,我可以保存一个创建的对象。但它仍然是默认值未设置,我在数据库中的这个字段的值为空

有什么想法吗?如果重要的话,我会使用MySQL服务器5.1。如果有任何帮助,我将不胜感激。提前谢谢


共 (2) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    尝试使用BOOLEAN数据类型,定义@Column注释如下:

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