1

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

  1. 会话是否绑定到弹簧事务?
  2. 每当创建新请求时都会创建一个新会话?
  3. 还是会话绑定到一个线程?

这可以解释吗?

谢谢

4

1 回答 1

4

会话绑定到事务,因为活动PlatformTransactionManager是一个HibernateTransactionManager. 但请注意,控制器请求不会在事务中运行——只有服务是自动事务的。您应该重构写入数据库的控制器以使用服务来完成这项工作,因此它是正确的事务性的。

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

如果你好奇的话,它就ThreadLocal在里面;TransactionSynchronizationManager您可以调用TransactionSynchronizationManager.getResource(sessionFactory)(用于def sessionFactory访问SessionFactory)来访问SessionHolder持有会话的 。

于 2013-05-27T17:58:14.603 回答