2017-03-20 134 views
1

我已經使用HQL編寫了一個簡單的Hibernate程序。 我已經將SELECT和UPDATE都包括進去了。當我更新任何記錄並嘗試顯示它時,它會返回舊記錄。 我在UPDATE之後提交事務,但仍然提取舊記錄。 當我爲SELECT添加新會話時,它會獲取更新的新記錄。我是否需要每次創建新會話以獲取最新記錄?獲取舊記錄

AppMain.class: 
    package com.HQL.Main; 

    import java.util.List; 

    import org.hibernate.Query; 
    import org.hibernate.Session; 
    import org.hibernate.SessionFactory; 
    import org.hibernate.Transaction; 
    import org.hibernate.cfg.Configuration; 

    import com.HQL.Model.Employee; 

    public class AppMain { 

     public static void main(String[] args) { 
      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
      Session session = sessionFactory.openSession(); 
      Transaction tx = session.beginTransaction(); 
      Query query = null; 
      List<Employee> list1 = null; 

      query = session.createQuery("from Employee"); 
      list1 = query.list(); 
      for (Employee emp : list1) { 
       System.out.println("\nEmployee ID:\t" + emp.getId() + "\nEmployee name:\t" + emp.getName() 
         + "\nEmployee Age:\t" + emp.getAge() + "\nEmployee Salary:" + emp.getSalary()); 
      } 

      query = session.createQuery("update Employee set age=:empname where id=:eid"); 
      query.setParameter("empname",36); 
      query.setParameter("eid",3); 
      int result = query.executeUpdate(); 
      System.out.println("Result:"+result); 
      tx.commit(); 

      session = sessionFactory.openSession(); 
      Query query1 = session.createQuery("from Employee"); 
      list1 = query1.list(); 
      for (Employee emp : list1) { 
       System.out.println("\nEmployee ID:\t" + emp.getId() + "\nEmployee name:\t" + emp.getName() 
         + "\nEmployee Age:\t" + emp.getAge() + "\nEmployee Salary:" + emp.getSalary()); 
      }  
      //tx.commit(); 
      session.close(); 
      sessionFactory.close(); 
     } 
    } 

回答

0

嘗試使用session.flush();session.clear();

法拉盛會話強制Hibernate把會話的內存狀態用的數據庫

清除徹底清除會話同步。它清除所有加載的對象並取消所有待處理的操作並清除所有對象的緩存。

更新嘗試沖洗和檢索像

 int result = query.executeUpdate(); 
     System.out.println("Result:"+result); 
     tx.commit(); 
     session.flush(); 
     session.clear(); 

還與Session.refresh(Object)

嘗試這應該工作

更多信息上https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html

+0

我已經包括會議結束後。 flush()到我的代碼中但sti它會在顯示時取出舊記錄。 –

+0

刷新後,嘗試使用相同的會話,而不是開始另一個會話 –

+0

是的,我已經使用了會話。 –