今天小编在用hibernate设置字段的默认值的时候遇到的一个小问题,特意分享一下,以免后来人继续犯错。。
小编的pojo层的代码是这样写的。。
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;
//省略getter和setter方法。。。。。
}
但是这样在插入数据进数据库的时候是会报下面这个错误的。。。
就是说,这个字段在执行hibernate生成的sql语句
的时候,字段status还是空的(null),小编设置的默认值完全不管用。。0
小编在网上找到了解决的方法。。
就是往类名上面加上一个注解。。。@DynamicInsert
这个注解的作用如下(小编在网上查到一位大神的博客,截图下来的)。。
这个注解的功能就是,当hibernate生成insert语句的时候会把值为null的字段过滤掉,不加入insert语句的参数中。
小编猜想,hiebernate给字段设置默认值是在hibernate生成的insert语句执行之后再生成一条insert语句,专门插入status的值。。
你们觉得呢。。。。。