2013-08-23 73 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();