org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actua...

本文介绍了一种解决在Hibernate中删除处于托管状态实体时出现的问题的方法。通过使用HQL语句替代直接删除实体的方式,避免了错误的发生,并提供了一个实际应用场景的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码

public Authentication deleteById(String id) {
        Authentication entity = super.get(id);
        if (entity != null) {
            getSession().delete(entity);
        }
        return entity;
    }

场景:平台的前台和后台为不同的用户登录,前台刷新页面的过程中,后台的页面刚好退出登录,拦截器在前台获取到了后台的用户信息,但此时后台用户信息在退出时已被删除,后台用户实体处于托管态。

异常分析:实体是托管态的时候,根据实体删除会报错。

修改后的代码

public Authentication deleteById(String id) {
        Authentication entity = super.get(id);
        /*此处改为HQL语句删除,原因是直接删除对象如果是托管态的话会报错*/
        if (entity != null) {
            String hql = "delete Authentication bean where bean.id=:id";
            getSession().createQuery(hql).setParameter("id", id)
                    .executeUpdate();
        }
        return entity;
    }

转载于:https://www.cnblogs.com/againn/p/7792233.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值