2013-08-23 101 views
0

即使在刪除對象後,我可以加載它並打印它的Id,這似乎很荒唐。這裏是我用來從實體教授檢索數據的類:休眠:對象已刪除,但仍然可以通過休眠加載

public class ProfCrud { 
SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); 
Session session ; 

public ArrayList<Object> findProfByProfId(int id){ 
    session = sessionFactory.openSession(); 
    Query Q = session.getNamedQuery("findProfByProfId"); 
    Q.setLong("id", id); 
    List<Object> objet = Q.list(); 
    session.close(); 
    return (ArrayList<Object>) objet; 
} 
public void deleteProfByProfId(int id){ 
    ProfCrud pc= new ProfCrud(); 

      session = sessionFactory.openSession(); 
    session = HibernateUtil.getSessionFactory().openSession(); 
    Transaction transaction = null; 
    try { 
     transaction = session.beginTransaction();  
     Prof c = (Prof) pc.findProfByProfId(id).get(0); 
       session.delete(c); 
      transaction.commit(); 
    } catch (HibernateException e) { 
     transaction.rollback(); 
     e.printStackTrace(); 
    } finally { 
     session.close(); 
    } 

    System.out.println(((Prof) pc.findProfByProfId(id).get(0)).getId()); 
} 

}

+0

您的外部範圍(您打印教授ID的範圍)是否有交易?是否有可能看到可重複讀取隔離的結果? – Pace

+0

我不認爲是這種情況,我試圖將其打印出來,並且無論如何都給出了結果。 – GSDa

+0

外面的方法是在任何外部事務或會話之外是否正確? findProfByProfId使用的會話在哪裏創建? – Pace

回答

0

打印之前我開了一個會議,啓動了一個事務,並關閉它。現在我無法加載對象。我不知道爲什麼,但如果有人能澄清它,我會很感激。

session = sessionFactory.openSession(); 
    session = HibernateUtil.getSessionFactory().openSession(); 
    transaction = session.beginTransaction();  
    transaction.commit(); 
    session.close();