我已经阅读过网上的各种文章,但在这一点上他们似乎相当分散。在我的配置和我的方法中,我需要做些什么才能获得休眠会话。我试图做一些直接的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