我的问题是关于Grails中的hibernate会话范围:
可以解释一下吗?
由于
答案 0 :(得分:3)
会话绑定到交易,因为有效PlatformTransactionManager
是HibernateTransactionManager
。但请注意,控制器请求不在事务中运行 - 只有服务是自动事务性的。您应该重构写入数据库的控制器以使用服务来完成这项工作,这样才能正确地进行事务处理。
为每个请求创建一个新会话,并由GrailsOpenSessionInViewInterceptor
绑定到该线程。这有助于避免延迟加载异常和其他问题。会话在线程结束时刷新并关闭。
如果您感到好奇,ThreadLocal
位于TransactionSynchronizationManager
;您可以致电TransactionSynchronizationManager.getResource(sessionFactory)
(使用def sessionFactory
访问SessionFactory
)以访问持有会话的SessionHolder
。