Java Hibernate:对象已删除,但仍可以由Hibernate加载

Java Hibernate:对象已删除,但仍可以由Hibernate加载,java,mysql,sql,hibernate,Java,Mysql,Sql,Hibernate,似乎荒谬的是,即使我删除了对象,我仍然可以加载它并打印它的Id。下面是我用来从Prof entity检索数据的类: public class ProfCrud { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session ; public ArrayList<Object> findProfByProfId( int id){ session = session

似乎荒谬的是,即使我删除了对象,我仍然可以加载它并打印它的Id。下面是我用来从Prof entity检索数据的类:

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());
}
公共类ProfCrud{
SessionFactory SessionFactory=HibernateUtil.getSessionFactory();
会议;
公共阵列列表findProfByProfId(int id){
session=sessionFactory.openSession();
Query Q=session.getNamedQuery(“findProfByProfId”);
Q.setLong(“id”,id);
List objet=Q.List();
session.close();
返回(ArrayList)对象;
}
公共void deleteProfByProfId(内部id){
ProfCrud pc=新ProfCrud();
session=sessionFactory.openSession();
session=HibernateUtil.getSessionFactory().openSession();
事务=空;
试一试{
事务=session.beginTransaction();
Prof c=(Prof)pc.findProfByProfId(id).get(0);
删除(c);
commit();
}捕获(休眠异常e){
transaction.rollback();
e、 printStackTrace();
}最后{
session.close();
}   
System.out.println(((Prof)pc.findProfByProfId(id.get(0)).getId();
}

}

就在打印之前,我打开了一个会话,启动了一个事务并关闭了它。现在我无法加载对象。我不知道为什么,但如果有人能进一步澄清,我会很感激的

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

您的外部作用域(打印教授ID的作用域)是否有事务?有没有可能您看到了可重复读取隔离的结果?我不认为是这样,我尝试将其打印在方法旁边,它给出了一个结果。方法之外的任何外部事务或会话是否正确?findProfByProfId创建的会话在哪里?@Pace我不知道,我编辑了帖子并添加了整个类,如果您能提供帮助的话。看起来您在deleteProfByProfId方法的开始处打开了两次会话,如果您删除了一个打开的会话调用,问题会消失吗?