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

JPA 同一方法多次操作单表数据导致数据不一致解决方案_第1张图片

 部分代码仅做参考

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

你可能感兴趣的:(JPA,java基础,数据库,sql,mysql)