springjpa hibernate @Column说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xufei512/article/details/81633447

jpa @Column说明

引入:项目一张数据表中创建时间字段设置了默认为当前时间,使用spring hibernate jpa执行插入后发现该字段值仍为NULL,排查发现hibernate自动将此字段拼接到insert,由于接口中并没有传入创建时间,为NULL值,所以直接插入NULL,默认值不起作用,由此查了下@Column注解,找到解决办法,使用insertable=false,使hibernate在组装插入语句时不将此字段组装进去,数据库的默认值就起到作用了,方式如下:

    @Column(name = "create_time",columnDefinition = "default CURRENT_TIMESTAMP",insertable=false,updatable=false)
    private Instant createTime;

@Column注解详细使用方法如下:

@Column(name="columnName";boolean unique() default false;boolean nullable() default true;
boolean insertable() default true;boolean updatable() default true;
String columnDefinition() default "";
String table() default "";
int length() default 255;
int precision() default 0; // decimal precision
int scale() default 0; // decimal scale
name 可选,字段名(默认值是属性名)
unique 可选,是否在该字段上设置唯一约束(默认值false)
nullable 可选,是否设置该字段的值可以为空(默认值false)
insertable 可选,该字段是否作为生成的insert语句中的一个字段(默认值true)
updatable 可选,该字段是否作为生成的update语句中的一个字段(默认值true)
columnDefinition 可选: 为这个特定字段覆盖sql DDL片段 (这可能导致无法在不同数据库间移植)
table 可选,定义对应的表(默认为主表)
length 可选,字段长度(默认值255)
precision
可选,字段数字精精度(默认值0)
scale 可选,如果字段数字刻度可用,在此设置(默认值0)
例如:
@Column(columnDefinition="int default 0",nullable=false,insertable=false,updatable=false)
Integer enMenuVerTag;//英文菜品是否已经校验   //0:未校验   1:已校验
@Column(columnDefinition="varchar(255) default 'x'",nullable=false,insertable=false,updatable=false)
String enMenuVerId;//英文菜品校验人
@Temporal(TemporalType.TIMESTAMP)
@Column(columnDefinition="TIMESTAMPTZ   default '2009-01-01 00:00:00'",nullable=false,insertable=false,updatable=false)
Date enMenuVerTime;//英文菜品校验时间

猜你喜欢

转载自blog.csdn.net/xufei512/article/details/81633447