Grails中的Hibernate会话范围

时间:2013-05-27 14:01:11

标签: hibernate grails session-variables

我的问题是关于Grails中的hibernate会话范围:

  1. 会话是否与春季交易绑定?
  2. 每当创建新请求时都会创建一个新会话?
  3. 或者会话绑定到一个帖子?
  4. 可以解释一下吗?

    由于

1 个答案:

答案 0 :(得分:3)

会话绑定到交易,因为有效PlatformTransactionManagerHibernateTransactionManager。但请注意,控制器请求在事务中运行 - 只有服务是自动事务性的。您应该重构写入数据库的控制器以使用服务来完成这项工作,这样才能正确地进行事务处理。

为每个请求创建一个新会话,并由GrailsOpenSessionInViewInterceptor绑定到该线程。这有助于避免延迟加载异常和其他问题。会话在线程结束时刷新并关闭。

如果您感到好奇,ThreadLocal位于TransactionSynchronizationManager;您可以致电TransactionSynchronizationManager.getResource(sessionFactory)(使用def sessionFactory访问SessionFactory)以访问持有会话的SessionHolder