关于jpa:JPA大坑-无法像mybaits一样在currentat字段自动生成创建时间
JPA大坑 ,无奈像mybaits一样在current_at字段,主动生成创立工夫mybatis jpa下实体类的保留 mybatis在mybatis我的项目中,咱们个别会应用它的插件plus以裁减它的根本查问性能。另一方面,在阿里巴巴开发手册的标准中也提到,在数据库表创立的时候,个别会有一个create_time和update_time字段,它们的建表语句往往如下: 'create_time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,'update_time' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP创建者则是心愿在行insert的时候会主动生成create_time,同时在其它行进行批改后,执行update操作会自动更新update_time字段。这样简化了开发,只有存储业务字段就能够了,开发者不必管工夫字段的生成。 jpa下实体类的保留新我的项目应用jpa,我也想当然的在表下create_at字段设置 NOT NULL DEFAULT CURRENT_TIMESTAMP,后果调save(entity)保留实体类的时候,发现基本没有像我想的那样在创立工夫字段保留insert的工夫,所有生成工夫字段都为null…打印sql语句才发现,原先调jpa的save办法,默认jpa会把所有字段都insert,为空的话就会本人设置null insert到表中,导致字段设置NOT NULL DEFAULT CURRENT_TIMESTAMP生效,所有的创立工夫字段都得本人set以后工夫这个与业务无关的字段,忘了的话就会报错了,效率低容易出错。最初发现还得在相应的实体类字段写如下正文才能够实现与mybaits雷同的成果,交由数据库去实现创立工夫的创立。 @Column(name = "create_at",insertable = false,updatable = false,columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private Date createAt; @Column(name = "update_at",insertable = false,updatable = false,columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") private Date updateAt;columnDefinition和前面的设置,就等于在数据库中设置DEFAULT CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP了,这样设置就会让createTime成为创立工夫,updateTime成为更新工夫,数据库会主动去保护他。 然而还有一个问题,jpa调用save办法时,会把这两个字段笼罩掉。所以这里须要insertable = false,updatable = false,这样jpa更新插入时就不会去更新这个字段了,而是齐全由数据库保护。参考文档:https://blog.csdn.net/weixin_30666401/article/details/96759783