• Spring JPA错误——No EntityManager with actual transaction available for current thread


    背景

    • 项目中使用删除+增加代替更新逻辑,在对应的service方法上增加事务处理
        @Override
        @Transactional
        public RetResult update(SysUserTable sysUserTable) {
            if (null != sysUserTable) {
    
                //删除关联
                List<SuperSuPro> superSuPros = superSuProRepository.findByUserUid(userUid);
                List<String> supersuUids = new LinkedList<>();
                superSuPros.forEach(superSuPro -> {
                    String supersuUid = superSuPro.getSupersuUid();
                    supersuUids.add(supersuUid);
                });
                superSuProRepository.deleteBySupersuUidIn(supersuUids);
    
                //增加关联
                farmCodes.forEach(farmCode->{
                    SuperSuPro superSuPro = new SuperSuPro();
                    superSuPro.setSuperRandomUUID();
                    superSuPro.setUserUid(userUid);
                    superSuPro.setFarmCode(farmCode);
                    superSuProRepository.save(superSuPro);
                });
    
                return ResultUtil.success("修改成功");
            }
    
            return ResultUtil.error(-1, "修改失败,请联系管理员");
        }
    • 结果报错,错误信息如下
    No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call

    原因

    • JPA接口deleteBySupersuUidIn(String uid)没有使用事务管理
    @Repository
    public interface SuperSuProRepository extends BaseRepository<SuperSuPro> {
    
        void deleteBySupersuUidIn(List<String> supersuUids);
    }

    解决办法

    • deleteBySupersuUidIn(String uid)接口上使用注解@Modifying
    @Repository
    public interface SuperSuProRepository extends BaseRepository<SuperSuPro> {
    
        @Modifying
        void deleteBySupersuUidIn(List<String> supersuUids);
    }
  • 相关阅读:
    沉痛的一天
    PowerBuilder之5年经验谈(一之1)--PB对Unicode的支持
    C# Client API for Sphinx (support to 0.99)
    F#学习笔记基本类型
    F#学习笔记方法
    接口串联
    eclipse 中如何设置注释?
    软件测试过程中手机截屏
    Postan中执行接口时使用JSON数据,那么什么是 JSON?
    MySQL使用dump备份以及恢复备份
  • 原文地址:https://www.cnblogs.com/zuiyue_jing/p/14653216.html
Copyright © 2020-2023  润新知