Hibernate检索/显示已删除的对象,即使它已被提交

时间:2016-10-12 04:54:49

标签: java hibernate

我使用的是Hibernate 3.3,最近升级到了4.3.11版本。 搬到这个版本后,我开始注意到一个奇怪的问题。

  1. 我删除的对象时不时出现。
  2. 我新添加的对象很少显示。
  3. 看起来db的当前状态只显示在用于删除它的确切连接池上。

    以下是用于保存的代码片段

        Transaction tx = null;
    
        try {
            Session session = hibSessFact.currentSession();
            tx = session.beginTransaction();
            session.save(o);
            tx.commit();
        }catch(Exception e){
            e.printStackTrace();
        } finally {
            hibSessFact.closeSession();
            System.out.println("session closed");
        }
    

    以下是检索数据的方式

            try{
               Session session = hibSessFact.currentSession();
               Criteria crit = session.createCriteria(MyObject.class);
               List objList = crit.list();
               System.out.println("returned list");
               return objList;
            }catch(Exception e){
               e.printStackTrace();
            }
            finally{
               hibSessFact.closeSession();
            }
    

    P.S。:添加新对象时,对象检索也会发生同样的情况。它只是间歇地显示,恰好是每第3个请求。

    更新:ThreadLocal用于使用HibernateSessionFactory创建会话。

1 个答案:

答案 0 :(得分:1)

而不是用于获取会话的currentSession使用openSession(),如下所示:

Session session = hibSessFact.openSession();

否则,在hibernate配置中添加以下属性。

<property name="hibernate.current_session_context_class">thread</property>