【发布时间】:2013-08-23 19:50:06
【问题描述】:
即使在我删除了对象之后我还能加载它并打印它的 ID,这似乎很荒谬。这是我用来从 Prof 实体中检索数据的类:
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());
}
}
【问题讨论】:
-
您的外部范围(您打印教授 ID 的范围)是否有交易?您是否有可能看到可重复读取隔离的结果?
-
我不认为是这种情况,我尝试将其打印在方法之外,但它还是给出了结果。
-
并且在方法之外是在任何外部事务或会话之外正确吗? findProfByProfId 使用的会话在哪里创建?
-
@Pace 我不知道,如果你能提供帮助,我编辑了帖子并添加了整个课程
-
看起来您在 deleteProfByProfId 方法开始时打开了两次会话,如果您删除其中一个打开的会话调用,问题会消失吗?