【问题标题】:In grails, what is the quickest way to obtain a reference to the current hibernate session?在 grails 中,获取对当前休眠会话的引用的最快方法是什么?
【发布时间】:2010-08-11 12:17:24
【问题描述】:

我有一个单例服务,在它唯一的方法中,我需要获取对绑定到当前请求的休眠会话的引用。最快的方法是什么?

【问题讨论】:

    标签: hibernate spring grails spring-mvc


    【解决方案1】:

    我们按照以下方式进行:

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    
    public class YourService  {
    
        SessionFactory sessionFactory // set by Dependency Injection
    
        public void yourMethod() {
            Session session = sessionFactory.getCurrentSession();
            // do something with session
        }
    }
    

    当您的服务位于 grails-app/services 目录并以“Service”结束时,会话工厂由 grails 注入。

    【讨论】:

    • sessionFactory.getCurrentSession 线程安全吗?我想知道,因为他正试图从静态实用程序方法访问它。
    • @Olexandr:该链接已失效。你能添加一个快速指针吗?也许 Session 不需要是线程安全的?
    • 文档说“实现者必须是线程安全的。” - SessionFactory 谈到 Grails - 它具有静态应用程序上下文,其中包含 sessionFactory,这让我相信它应该是线程安全的,因为可能出现错误。最后一个参数 - SessionFactory 是不可变的,因此它的状态是持久的,这就是几乎不会发生线程问题的原因。
    【解决方案2】:

    或者只是

    def someServiceMethod {
       SomeDomainObjectClass.withSession { session ->
         .....
       }
    }
    

    域对象是定义在 grails-app/domain 目录中的类。 session 变量将在 withSession 闭包中获取当前的 Hibernate Session 引用。

    【讨论】:

      猜你喜欢
      • 2013-05-18
      • 2014-12-20
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      相关资源
      最近更新 更多