1、场景
在项目中执行update操作时没有修改create_time,但是每次操作create_time
都会发生改变,并且是格林威治时间和东八区的时间此相差8个小时。
2、问题定位
使用mybatis-plus生成的updateById()方法和自己编写的XML方法进行update
操作时效果是一样的,但是两种方式打印出来的sql都没有去修改create_time。
============== Sql Start ==============
Execute ID :org.scrm.coupon.mapper.CouponMapper.updateById
Execute SQL :
UPDATE coupon
SET tenant_id = ?,
coupon_type_id = ?,
coupon_type_name = ?,
coupon_rule_id = ?,
NAME = ?,
describtion = ?,
image_url = ?,
discount = ?,
face_value = ?,
coupon_cost = ?,
inventory_type = ?,
is_group = ?,
use_range_type = ?,
business_dept = ?,
online_mall = ?,
online_room_reservation = ?,
coupon_effect_type = ?,
coupon_not_use_type = ?,
use_with_other_coupon = ?,
use_with_other_activity = ?,
use_wechat_card_package = ?,
update_time = ?
WHERE
id = ?
AND is_deleted = 0
Execute Time:7 ms
============== Sql End ==============
由此来看问题不是出在sql的编写上。
3、解决
通过分析sql基本上可以确定问题是出在数据库表对应字段的设置上
对比两张图片可以发现create_time字段勾选了根据当前时间戳更新,也就是说只要当前数据发生变化create_time就会根据当前时间戳计算出一个时间并替换原来的值;所以我们只需要去掉这个勾选问题就解决了。