springjpa hibernate @Column说明

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;//英文菜品校验时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值