JPA 同一方法多次操作单表数据导致数据不一致解决方案

jpa  在使用过程中会碰到缓存 ,当多次操作数据库 时会导致数据不一致,出现脏数据。

目录

举例:

解决方法:


举例:

    A表更新逻辑如下

1、查询数据库A 表中的数据

2、采用原生sql  当修改完成后数据库是执行了状态修改,

3、再用jpa的 save()方法做保存 逻辑2中修改后的状态就会被覆盖为查询前的数据(这里执行完逻辑2, jpa查询取到的数据就是缓存数据并不是数据库的最新数据) 。

tips:(有些业务特殊无法保持数据的一致性,所以采用sql + 实体的更新方式)

解决方法:

 引入jpa 的EntityManager    

     import javax.persistence.EntityManager;	
     
     @PersistenceContext
	 private EntityManager em;

tips: 使用过程中 使用方法需要事务管理 需加上 @Transactional

 部分代码仅做参考

	@Transactional
	private void deliveryOrder(String salesBillNo,Map<String, String> map ) throws Exception {
		
		SalesBillHead bySalesBillNo = salesBillHeadRepository.getBySalesBillNo(salesBillNo);
		// 将缓存中数据存入数据库
		em.flush();
		// 获取数据库 最新 数据
		em.refresh(bySalesBillNo);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值