我的问题是关于 Grails 中的休眠会话范围:
- 会话是否绑定到弹簧事务?
- 每当创建新请求时都会创建一个新会话?
- 还是会话绑定到一个线程?
这可以解释吗?
谢谢
我的问题是关于 Grails 中的休眠会话范围:
这可以解释吗?
谢谢
会话绑定到事务,因为活动PlatformTransactionManager
是一个HibernateTransactionManager
. 但请注意,控制器请求不会在事务中运行——只有服务是自动事务的。您应该重构写入数据库的控制器以使用服务来完成这项工作,因此它是正确的事务性的。
为每个请求创建一个新会话,并由GrailsOpenSessionInViewInterceptor
. 这有助于避免延迟加载异常和其他问题。会话在线程结束时刷新并关闭。
如果你好奇的话,它就ThreadLocal
在里面;TransactionSynchronizationManager
您可以调用TransactionSynchronizationManager.getResource(sessionFactory)
(用于def sessionFactory
访问SessionFactory
)来访问SessionHolder
持有会话的 。