2013-07-19 53 views
0

在我的grails應用程序中,我們正在調用一個可能會更新數千條記錄的存儲過程。在存儲過程調用之後,我需要將這些記錄中的很多以json格式發送回UI。但是,hibernate在存儲過程完成後繼續看到舊對象。我已經試過每個這些對象的evict(),並使用HQL再次加載它們,但無濟於事。如何在存儲過程發生更改後刷新hibernate對象

什麼是解決這個問題的最佳方法。

回答

2

答案在於這個問題。 :)使用refresh()。請參閱this

如果您想完全清除休眠會話,則可以使用session.clear()。請參閱clear。 對於您需要獲取當前會話的保持,你有兩種方式做到:的sessionFactory

  1. 弄個,獲取當前會話並清除相同。 grailsApplication.mainContext.sessionFactory.currentSession.clear()

  2. 使用withSession閉包。

    DomainABC.withSession{s-> s.clear()}

+0

我至少有幾百個,我裝入用一個HQL和不想iteracte和運行刷新()每個單獨的對象上的對象。應該有一些方法來清除休眠會話/緩存中的所有對象。 – Amit

+0

@ user593644查看答案的更新。你可以使用'clear'清除會話。 – dmahapatro

+0

refresh()和session.clear()不適用於我。我嘗試運行原生查詢來獲取數據,我認爲它比HQL查詢在直接從數據庫獲取數據方面表現更好。但是,即使這樣也超過了25%的時間。然後,在獲取數據之前,我添加了一個'session.flush();''session.clear();'和'Thread.sleep(2000);'。現在,它似乎工作得很好,雖然我對爲什麼如此愚蠢?我不希望groovy.sql.Sql.execute()是異步的。我感到困惑。 – Amit

相關問題