JPA对数据库修改注意点
2023-12-15 14:30:53
    		同一事务中获取不到修改数据
spring-boot-starter-parent版本2.7.12
Dao
@Query(value = "select * from inventory_list where id in (?1) order by id desc",nativeQuery = true)
List<InventoryListEntity> getByIds(List<Integer> idList);
@Modifying
@Query(value = "update inventory_list set CLASSIFY_TYPE = ?2 where id in (?1)",nativeQuery = true)
void updateClassifyType(@Param(value = "ids") List<Integer> id,
						@Param(value = "classifyType") String classifyType);
Service
InventoryListService
public interface InventoryListService {
    List<InventoryListEntity> getByIds(List<Integer> idList);
    void updateClassifyType(List<Integer> idList, String classifyType);
    boolean updateClassifyTypeToE(List<Integer> idList);
    boolean updateClassifyTypeToI(List<Integer> idList);
}
UserService
public interface UserService {
	
	boolean updateClassifyType(List<Integer> idList);
}
ServiceImpl
InventoryListServiceImpl
@Component
public class InventoryListServiceImpl implements InventoryListService {
    private final Log log = LogFactory.getLog(this.getClass());
    Gson gson = new Gson();
    @Autowired
    private InventoryListDao inventoryListDao;
    @Override
    public void updateClassifyType(List<Integer> idList, String classifyType) {
        inventoryListDao.updateClassifyType(idList, classifyType);
    }
    @Override
    public List<InventoryListEntity> getByIds(List<Integer> idList) {
        return inventoryListDao.getByIds(idList);
    }
    @Override
    public boolean updateClassifyTypeToE(List<Integer> idList) {
        List<InventoryListEntity> entityList = getByIds(idList);
        if (entityList.size() < idList.size()){
            log.warn("存在未查到数据");
            return false;
        }
        for (InventoryListEntity entity : entityList) {
            log.info("? to E,classifyType: " + gson.toJson(entity.getClassifyType()));
        }
        updateClassifyType(idList, "E");
        return true;
    }
    @Override
    public boolean updateClassifyTypeToI(List<Integer> idList) {
        List<InventoryListEntity> entityList = getByIds(idList);
        if (entityList.size() < idList.size()){
            log.warn("存在未查到数据");
            return false;
        }
        for (InventoryListEntity entity : entityList) {
            log.info("E to I,classifyType: " + gson.toJson(entity.getClassifyType()));
            if (!"E".equals(entity.getClassifyType())){
                return false;
            }
        }
        updateClassifyType(idList, "I");
        return true;
    }
}
UserServiceImpl
@Component
public class UserServiceImpl implements UserService {
	private final Log log = LogFactory.getLog(this.getClass());
	@Autowired
    private InventoryListService inventoryListService;
	// 默认事务隔离级别
	@Override
    @Transactional
    public boolean updateClassifyType(List<Integer> idList) {
        boolean flag1 = inventoryListService.updateClassifyTypeToE(idList);
        if (!flag1){
            return false;
        }
        log.info("updateClassifyTypeToE success");
        boolean flag2 = inventoryListService.updateClassifyTypeToI(idList);
        if (!flag2){
            log.info("updateClassifyTypeToE false");
            return false;
        }
        return true;
    }
}
Controller
@RestController
public class JpaEntityController {
    @Autowired
    private UserService userService;
    @PostMapping("/jpa/entity/test")
    public String jpaEntityTest(@RequestBody List<Integer> idList){
        boolean flag = userService.updateClassifyType(idList);
        if (flag){
            return "true";
        }
        return "false";
    }
}
请求结果日志

 
数据最终都会被改成之前第一次修改的状态
 
 
解决方式
将修改换成对entity实体的修改

 
    			文章来源:https://blog.csdn.net/weixin_47748878/article/details/134880007
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!