问题定位总结:java 事务的时间问题

数据库使用的是pgsql,编程语言使用的是java,伪代码如下:

@Transactional
public void testTimeInTransactional() {
   A a = new A();
   a.setUpdateTime(new Date());
   //执行更新表a 的sql,更新时间取的是java方法里的new Date()
   // update table_a set updateTime = #{a.updateTime}
   
   //执行更新表b和表c的sql,更新时间取的是sql函数 now()
   // update table_b set update_time = now();
   // update table_c set update_time = now();
   // 其他业务逻辑
   // ....

}

发现以下现象:

table_b 和table_c 的update_time时间一样,但却小于table_a的update_time。

经查询资料,找到以下知识点:

(1)‌在一个事务中,PostgreSQL的now()函数返回的是事务开始时间。‌ 在事务开始时调用now()函数,它会返回事务开始时的当前时间。即使在事务过程中多次调用now()函数,每次调用返回的时间都是事务开始时的同一时间‌;

(2)在Java中,new Date()创建的是一个代表当前日期和时间的对象,精度为毫秒。数据库中的now()函数提供的时间通常包含微秒级别的精度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值