java - 休眠在数据库端设置默认值的正确方法
问题描述
我是休眠新手,我正在寻找在数据库端设置默认值的正确方法。
我希望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
甚至不需要。
解决方案
您可以简单地初始化变量并将该值设置为默认值。@Column(nullable = false) 私有布尔 isProtected = false;
否则,您可以使用 @Column 注释的 columnDefinition 属性,例如:
@Column(columnDefinition="boolean default false") private Boolean isProtected;
推荐阅读
- java - Kubernetes 中的 KeyCloak 如何处理 200 个连接?
- java - 如何将外部jar文件传递给spring boot项目?
- reactjs - spring security http.formLogin.loginPage 方法不会捕获来自 react js 3000 服务器的 POST 请求
- c# - 无法使用实例引用访问成员;改为使用类型名称限定
- java - 从 Java 中的 HashMap 解析和访问以下 JSON 数据格式
- php - 如何在部署中管理 Laravel 队列?
- javascript - 如何处理不在 DOM 中的“queryselected”元素
- javascript - 如何将此json转换为这样的数组?
- javascript - 检查 componentDidMount 中的所有 setState 方法是否完成
- android - 在片段 Val 中使用 RecycleView 无法重新分配问题