内容简介:微信公众号:一个优秀的废人如题,今天这篇是一个刚认识不久的小师弟的投稿。交谈中感觉技术水平与代码素养非常高,关键是才大二呀。那会我应该还在玩泥巴吧,真是后生可畏。我在本地端( windos 端,数据库版本 MySQL5.7、SpringBoot2.1.3、数据访问框架 JPA)测试代码时 current_timestamp 属性只要设有置默认值,就会自动生成数据的创建时间,与修改数据之后的修改时间。但是在 CentOS 服务器中。调用 JPA 中 save() 方法。字段却不会自动生成了。
微信公众号:一个优秀的废人
前言
如题,今天这篇是一个刚认识不久的小师弟的投稿。交谈中感觉技术水平与代码素养非常高,关键是才大二呀。那会我应该还在玩泥巴吧,真是后生可畏。
问题描述
我在本地端( windos 端,数据库版本 MySQL 5.7、SpringBoot2.1.3、数据访问框架 JPA)测试代码时 current_timestamp 属性只要设有置默认值,就会自动生成数据的创建时间,与修改数据之后的修改时间。但是在 CentOS 服务器中。调用 JPA 中 save() 方法。字段却不会自动生成了。
1、这是其中一张数据库的案例:
CREATE TABLE `user_info` ( `id` int(32) NOT NULL AUTO_INCREMENT, `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `shop_type` int(11) NULL DEFAULT NULL COMMENT '店铺编号', `salt` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '盐', `status` int(64) NOT NULL COMMENT '账号状态', `openid` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '微信openid', `create_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', `update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `upe_seller_info_username`(`username`) USING BTREE );
从上面 SQL 示例可以注意到表字段,创建时间和更新时间设置了默认值 CURRENT_TIMESTAMP(0) 。
2、这是发送的创建用户请求,里面的逻辑有 save 方法:
3、这是在线上服务器报的错误
问题排查
前面我说了,我已经设置了字段有默认值的。。但是为什么在线上服务器居然没有自动生成。我百思不得其解,在本地端安然无恙,怎么线上环境炸了呢?而且我还在日志中发现一般都是 insert 中会出错误。
尝试解决:首先我在 entity 层中删除了createtime,updatetime,果然不报空了。但是在我的 freemarker 上又必须有这个字段怎么办呢?
解决问题
在你的 createtime,updatetime 上分别加上 @CreatedDate 和 @LastModifiedDate 在 entity 类上加注解 @EntityListeners(AuditingEntityListener.class) 还要在你的启动类加上 @EnableJpaAuditing ,问题迎刃而解。
entity类
@Data
@Entity
@DynamicUpdate // 生成动态SQL语句,即在插入和修改数据的时候,语句中只包括要插入或者修改的字段。
@EntityListeners(AuditingEntityListener.class)
public class UserInfo {
@Id
@GeneratedValue
private Integer id;
private String username;
private String password;
//店铺编号
private Integer shopType;
//加盐
private String salt;
private Integer status;
//卖家微信openid
private String openid;
//创建时间
@CreatedDate
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
//更新时间
@LastModifiedDate
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
}
启动类
@SpringBootApplication
@EnableSwagger2
@EnableJpaAuditing
public class ShipApplication {
public static void main(String[] args) {
SpringApplication.run(ShipApplication.class, args);
}
}
至此,问题解决。
注解解释
@CreatedDate //表示该字段为创建时间时间字段,在这个实体被insert的时候,会设置值 @LastModifiedDate //同理 @EntityListeners(AuditingEntityListener.class) // JPA审计 @EnableJpaAuditing//开启JPA审计
我的思考
我个人的理解是当我们添加这些注解后,JPA 的审计功能会把值再重复设置进 createtime,updatetime 这两个字段里面,第一遍是数据库层默认值,第二遍就是代码层设置的。
后语
如果本文对你哪怕有一丁点帮助,请帮忙点好看。你的好看是我坚持写作的动力。
另外,关注之后在发送 1024 可领取免费学习资料。资料内容详情请看这篇旧文: Python、C++、 Java 、 Linux 、 Go 、前端、算法资料分享
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 行间距失效问题
- 前端实现设置缓存数据定时失效
- 5分钟探究Spring事务失效原因
- Andorid内Aspectj切面失效分析
- Xcode 代码提示失效以及引发的感想
- Firefox 已发布“插件失效”证书修复补丁
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Usability for the Web
Tom Brinck、Darren Gergle、Scott D. Wood / Morgan Kaufmann / 2001-10-15 / USD 65.95
Every stage in the design of a new web site is an opportunity to meet or miss deadlines and budgetary goals. Every stage is an opportunity to boost or undercut the site's usability. Thi......一起来看看 《Usability for the Web》 这本书的介绍吧!