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

源代码

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;
    }
posted @ 2017-11-06 11:13  Againn  阅读(2365)  评论(0编辑  收藏  举报