首页 > 解决方案 > 休眠在数据库端设置默认值的正确方法

问题描述

我是休眠新手,我正在寻找在数据库端设置默认值的正确方法。

我希望hibernate生成的DDL相当于这个:

create table SpaceGroup (
        name varchar(255) not null, 
        isProtected boolean default FALSE not null, 
        primary key (name)
)

这是我的实体声明:

@Entity
@DynamicInsert
public class SpaceGroup {
    @Id
    private String name;
    @ColumnDefault("FALSE")
    @Column(nullable = false)
    private Boolean isProtected;
}

这种方法的问题是hibernate没有意识到有一个db默认值,所以当我插入对象时它抱怨我没有给一个not null字段值:

org.hibernate.PropertyValueException: not-null property references a null or transient value : com.ziqi.models.SpaceGroup.isProtected

即使添加一个@DynamicInsert也不能解决这个问题

为什么休眠无法推断该字段将在数据库端被赋予默认值?如果我理解正确,我相信@DynamicInsert甚至不需要。

标签: javahibernate

解决方案


您可以简单地初始化变量并将该值设置为默认值。@Column(nullable = false) 私有布尔 isProtected = false;

否则,您可以使用 @Column 注释的 columnDefinition 属性,例如:

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


推荐阅读