在Grails中如何在域类静态方法中访问hibernate会话?

时间:2009-12-14 02:49:11

标签: hibernate grails sessionfactory

我在网上看过各种各样的文章,但在这一点上它们似乎相当分散。在我的配置和我的方法中,我需要做什么才能获得hibernate会话。我正在尝试为存储过程进行一些直接的SQL调用。我有一个很大的代码库,我从Ruby移植了许多静态方法和存储过程调用。如果我需要使用sessionFactory,那么如何访问它呢?

3 个答案:

答案 0 :(得分:25)

从静态方法中,您可以从应用程序上下文中提取sessionFactory bean:

import org.codehaus.groovy.grails.commons.ApplicationHolder as AH
...
def ctx = AH.application.mainContext
def sessionFactory = ctx.sessionFactory
def session = sessionFactory.currentSession

答案 1 :(得分:22)

如果它在服务或控制器中,您只需要声明sessionFactory

  

def sessionFactory

注入它。之后你可以参考

sessionFactory.currentSession

使用它。

查看hibernate-filter插件(文件HibernateFilterGrailsPlugin.groovy),了解如何注入一堆使用会话的方法。

答案 2 :(得分:12)

您可以使用 withSession

Book.withSession { session ->
    session.clear()
}

More info