Grails中的Hibernate会话范围

Grails中的Hibernate会话范围,hibernate,grails,session-variables,Hibernate,Grails,Session Variables,我的问题是关于Grails中的hibernate会话范围: 会话是否绑定到spring事务? 无论何时创建新请求,都会创建新会话? 或者会话绑定到线程? 这可以解释吗 由于活动平台TransactionManager是HibernateTransactionManager,因此会话绑定到事务。但请注意,控制器请求不会在事务中运行-只有服务自动执行事务。您应该重构写入数据库的控制器,以使用服务来完成这项工作,从而使其具有正确的事务性 为每个请求创建一个新会话,并由GrailsOpenSession

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

会话是否绑定到spring事务? 无论何时创建新请求,都会创建新会话? 或者会话绑定到线程? 这可以解释吗


由于活动平台TransactionManager是HibernateTransactionManager,因此会话绑定到事务。但请注意,控制器请求不会在事务中运行-只有服务自动执行事务。您应该重构写入数据库的控制器,以使用服务来完成这项工作,从而使其具有正确的事务性

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


如果您好奇,ThreadLocal位于TransactionSynchronizationManager中;您可以调用TransactionSynchronizationManager.getResourcesessionFactory使用def sessionFactory访问sessionFactory以访问保存会话的会话持有者。

由于活动平台TransactionManager是HibernateTransactionManager,会话绑定到事务。但请注意,控制器请求不会在事务中运行-只有服务自动执行事务。您应该重构写入数据库的控制器,以使用服务来完成这项工作,从而使其具有正确的事务性

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

如果您好奇,ThreadLocal位于TransactionSynchronizationManager中;您可以调用TransactionSynchronizationManager.getResourcesessionFactory使用def sessionFactory访问sessionFactory以访问保存会话的SessionHolder