我已經閱讀過網上的各種文章,但在這一點上他們似乎相當分散。在我的配置和我的方法中,我需要做些什麼才能獲得休眠會話。我試圖做一些直接的SQL調用存儲過程。我有一個龐大的代碼庫,我正從Ruby中移植大量的靜態方法和存儲過程調用。如果我需要使用sessionFactory,那麼如何訪問它?在Grails中,我如何訪問域類靜態方法中的hibernate會話?
回答
從您可以從應用程序上下文拉SessionFactory的bean的靜態方法:
import org.codehaus.groovy.grails.commons.ApplicationHolder as AH
...
def ctx = AH.application.mainContext
def sessionFactory = ctx.sessionFactory
def session = sessionFactory.currentSession
如果它是一個服務或控制器,你只需要聲明SessionFactory的
高清SessionFactory的
把它注入。之後你可以參考
sessionFactory.currentSession
要使用它。
查看hibernate-filter插件(文件HibernateFilterGrailsPlugin.groovy)瞭解如何注入一堆使用會話的方法。
我專門找如何從域類靜態方法中獲取它。我不想從控制器獲取會話並將其傳遞給方法。這是1990年代' – Andrew 2009-12-14 13:41:35
我試過這與Grails 2.1和會議工廠似乎沒有注入到服務。上面的伯特方法似乎仍然有效。 – 2012-08-21 16:44:52
我現在在2.2.3上測試了它,它工作正常。 – 2013-12-05 20:25:37
這看起來並沒有給你完整的Hibernate會話,而是一個Grails會話,這是缺少一些方法(例如'createSQLQuery') – 2014-05-21 23:21:27
這似乎不是充滿真相的評論。會話不是「Grails」會話,而是Hibernate會話。很容易確定;用'println session.getClass().name'替換'session.clear()',並且很有可能在輸出中看到org.hibernate.internal.SessionImpl – 2014-11-18 17:32:32
- 1. 靜態類訪問會話
- 2. 在靜態Java方法中訪問類
- 3. 如何在靜態方法中訪問靜態和非靜態方法
- 4. Grails如何從域類的靜態方法調用服務?
- 5. 在靜態方法中訪問全局類的全局方法
- 6. 從C++中的靜態方法訪問非靜態類變量
- 7. 在jar中訪問的靜態方法
- 8. Grails中的服務方法或域靜態方法?
- 9. 我可以在Perl中訪問動態指定類中的靜態方法嗎?
- 10. 如何通過靜態變量訪問ASP.NET Core中的會話?
- 11. 如何訪問靜態對象中的會話
- 12. 如何在靜態方法中獲取會話變量的值?
- 13. 如何在靜態方法中訪問父非靜態屬性,在PHP中?
- 14. 從AJAX調用的靜態方法訪問會話
- 15. 如何從mongoose中的實例方法訪問靜態方法?
- 16. 通用類的訪問靜態方法
- 17. Grails:如何在其他域中「訪問」域類實例變量?
- 18. 在java中的靜態方法,我可以以非靜態方式訪問靜態方法嗎?
- 19. 訪問java中的靜態方法
- 20. 在子類中訪問超類靜態方法
- 21. 我們可以從靜態方法訪問/調用無狀態會話Bean嗎?
- 22. 如何在抽象類方法中訪問注入的Grails bean?
- 23. 訪問Java中靜態方法的包含類的類型
- 24. 如何從基類靜態方法訪問派生類的值?
- 25. 在Java中訪問靜態嵌套類的方法
- 26. 從靜態方法訪問類成員
- 27. 如何訪問靜態方法?
- 28. 如何訪問一個靜態方法
- 29. 無法從類訪問會話狀態?
- 30. 在EL中訪問無狀態會話bean的簡單方法?
謝謝伯特。我會試一試。 – Andrew 2009-12-14 15:01:43
ApplicationHolder現已被棄用,是否有更新方法? – 2013-05-30 20:07:58
'import grails.util.Holders'將導入非棄用的靜態Holder,然後'Holders.grailsApplication.mainContext.sessionFactory'將給你一個sessionFactory的句柄。 – pendext 2014-11-18 17:09:27