2016-04-14 28 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