2016-04-14 79 views
1

Tag是一个实体,我删除带有这种方法:休眠:选择后删除认定已删除对象第一次

public static List<Tag> listTags() { 
     Session session = HibernateUtil.getSessionFactory().openSession(); 
     Query q = session.createQuery("FROM Tag tag"); 
     List<Tag> tags = (List<Tag>) q.list(); 
     session.close(); 
     return tags; 
} 

public static <T> boolean deleteById(Class<? extends BaseEntity> clazz, Long id) { 
     Session session = HibernateUtil.getSessionFactory().openSession(); 
     try { 
      session.beginTransaction(); 
      T e = get(clazz, id); 
      if (e != null) { 
       session.delete(e); 
       session.getTransaction().commit(); 
       return true; 
      } else { 
       return false; 
      } 
     } finally { 
      session.close(); 
     } 
} 

接下来的事情,我用这种方法再次读取标签列表

问题是,当删除和重新选择所有标签时,删除的标签在列表中,但不在数据库中。当我第二次运行listTags()时,通过单击一个链接,该对象被删除,我得到正确的列表。 有谁知道为什么?

+0

请清楚一点,我 - 时当您在列表中看到已删除项目还在,这是 ?它是在重新查询之后,还是你在突破或其他事情之后。这将有助于确定发生了什么。 – jr593

+0

如何在删除后添加'session.flush()'? – jpkrohling

+0

Abdelhak解决了它。 @ jr593首先我删除然后打开一个新的会话,并用HQL读取整个Tag列表:“FROM Tag tag” –

回答

0

尝试添加flush()和使用commit()象下面这样:

... 
    session.delete(e); 
    session.flush(); 
    session.beginTransaction().commit(); 
    ... 

欲了解更多信息请访问session.getTransaction() vs session.beginTransaction()

+0

谢谢,'session.beginTransaction()。commit();'做到了。为什么这个工作,而不是getTransaction()? –

+0

@JackFlamp查看上面的链接 – Abdelhak