2012-12-01 59 views
1

我已經編寫了從我的數據庫獲取數據的代碼。無法從數據庫中獲取正確的數據

當用戶點擊一個鏈接,然後調用下面的動作。它給了我第一次正確的數據。但如果管理員更新表格數據。然後下面的代碼未能顯示錶中新近更新的數據。如果我多次刷新頁面,則會顯示新更新的數據。但下一次刷新後,它會再次顯示舊數據。

我很確定問題在於dao或可能在Action類中。我不知道這背後的問題是什麼? 請幫我解決這個問題。

BookdetailsDAO.java

public List findasc(int o,int l) 
{ 
    List list = null; 

     try { 
      session = HibernateUtil.getSessionFactory().openSession(); 
      Query q1 = session.createQuery("FROM Bookdetails ORDER BY authLastname ASC"); 
      q1.setFirstResult(o); 
      q1.setMaxResults(l); 
      list =q1.list(); 
     } catch (Exception e) { 
      System.out.println("Exception in findasc() :" + e); 
     } finally { 
      try { 
       session.flush(); 
       session.close(); 
      } catch (Exception e) { 
       System.out.println("Exception In findasc Resource closing :" + e); 
      } 
     } 
     return list; 
} 
+0

你用編輯器調試模式試圖解決?你在使用任何類型的緩存嗎? –

+0

@ UmeshAwasthi對不起,但我不知道編輯器調試模式?我只知道eclipse調試器或使用'System.out.print(「」);'。我不明白'你在使用任何緩存嗎?' –

+0

是的意思是我在談論Eclipse調試模式,試着看看問題在哪裏,我相信它是在Hibernate那邊它的返回緩存數據並且不觸發任何數據庫查詢,請嘗試啓用休眠日誌記錄並查看到底發生了什麼 –

回答

1

嘗試添加專用提交代替齊平。可能Hibernate在關閉會話時不會立即提交。

您還應該嘗試讀取一筆交易中的所有數據。根據您的代碼,您爲DAO的每次呼叫打開一個會話。重新使用會話進行屬於一起的呼叫。

我強烈建議讓您的基礎架構爲您打開,關閉並提交會話。考慮使用註釋驅動方法,例如

+0

謝謝!但我不明白你在說什麼。你能否參考你的解釋展示一些代碼? '你也應該嘗試讀取一次交易中的所有數據。根據您的代碼,您爲DAO的每次呼叫打開一個會話。重新使用會話進行屬於一起的呼叫。 –

+0

https://community.jboss.org/wiki/SessionsAndTransactions?_sscc=t – sorencito

+0

該鏈接解釋了你想做的事情。特別是,它顯示瞭如何爲每個請求創建一個會話。 – sorencito

0

問題通過應用此代碼

sessionFactory.close(); tx.commit();
session.close();

+0

爲什麼你在sorencito早些時候接受你自己的答案並且說要使用提交,這就是你正在做的事情? –

+0

我接受,因爲'sessionFactory.close();'是我的問題的主要解決方案。 sorencito沒有說要做'sessionFactory.close();'。我沒有使用google搜索,並得到了解決方案。但你說接受sorencito答案,所以現在我接受了他的答案。 –