hibernate在用注解设置字段的默认值时遇到的问题

今天小编在用hibernate设置字段的默认值的时候遇到的一个小问题,特意分享一下,以免后来人继续犯错。。

小编的pojo层的代码是这样写的。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.Shayla.pojo;

import java.io.Serializable;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.DynamicInsert;

@Entity
@Table(name="t_user")
public class User implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO) //主键生成策略
private Integer id;
private String username;
private String password;
private String nickname;
@Column(nullable=false,columnDefinition="Integer default 1") //这里是设置这个字段的默认值是Integer类型并且值为1
private String status;
//省略gettersetter方法。。。。。
}

但是这样在插入数据进数据库的时候是会报下面这个错误的。。。

就是说,这个字段在执行hibernate生成的sql语句的时候,字段status还是空的(null),小编设置的默认值完全不管用。。0

小编在网上找到了解决的方法。。

就是往类名上面加上一个注解。。。@DynamicInsert

这个注解的作用如下(小编在网上查到一位大神的博客,截图下来的)。。

这个注解的功能就是,当hibernate生成insert语句的时候会把值为null的字段过滤掉,不加入insert语句的参数中。

小编猜想,hiebernate给字段设置默认值是在hibernate生成的insert语句执行之后再生成一条insert语句,专门插入status的值。。

你们觉得呢。。。。。
————————————————

原文链接:https://blog.csdn.net/LuciferMS/article/details/77803115


hibernate在用注解设置字段的默认值时遇到的问题
http://ysocket.pages.dev/2022/01/04/hibernate-modify-default-value/
作者
YSocket
发布于
202214
许可协议