源代码
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; }