欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jpa中的小问题,save方法

程序员文章站 2022-04-23 15:58:31
...
asOrderEntity.setLastUpdatedAt(LocalDateTime.now()); 
asOrderEntity.setLastUpdatedBy(UserHelper.getUserId());
asOrderRepository.save(asOrderEntity);

jpa自带的save方法保存修改数据很方便,但是你知道他是如何保存修改数据的么?
save方法保存修改数据首先会根据标注为主键的字段去查询是否存在这样一条数据,如果存在则是修改,如果不存在则是添加。
那么问题就来了,如果是修改的话,save方法是如何判断哪个字段是被修改过的呢?答案是不会判断,他会把整个对象的数据都保存下来,无论你是否修改了这个字段。
但是我们都知道这很浪费资源,jpa作为一个很多人使用的框架自然也给出了解决办法。就是在entity类上加上注解@DynamicUpdate
@DynamicInsert。

@DynamicUpdate//自动修改
@DynamicInsert//自动添加
@Data
@Entity
@Table(name = "as_order")
public class AsOrderEntity {

这样jpa就会自动捕获那些被手动设置了值的字段进行修改了。
比如

asOrderEntity.setLastUpdatedAt(LocalDateTime.now()); 
asOrderEntity.setLastUpdatedBy(UserHelper.getUserId());
asOrderRepository.save(asOrderEntity);

这个时候,order表的数据就会根据id找到这个数据,然后只修改他的最后修改人和最后修改时间字段。
最后,提醒一句,在所有修改保存数据的地方,我们都应该认真思考高并发的时候会不会出现脏数据。如果有可能出现,记得加锁。

相关标签: spring data jpa jpa