Tho*_*our 14 session grails hibernate transactions grails-orm
我知道一个获取底层会话而另一个获取当前事务状态的引用; 但是,它们之间的区别是什么?每个用例的用例是什么?
我的要求是批量保存Service方法块中的一些记录.
Bur*_*ith 23
withTransaction有点hackish因为它允许你在任何地方进行交易工作,但最好将你的顾虑分开并在交易服务中完成工作.默认情况下,服务是事务性的,除非您添加static transactional = false并可以使用@Transactional注释在类和/或方法级别进行微调.你可以把你的代码放在服务方法中,而不使用withTransaction或withSession.
withSession是访问当前Hibernate Session(通常是OpenSessionInView拦截器注册的Hibernate)的便捷方式.如果您想要清除会话,或者做其他未被GORM公开的工作,这是一种访问它而无需访问sessionFactory Spring使用的线程本地持有者的方法.
withTransaction在事务服务方法之外的一个有效使用是Session在你不在控制器请求之外绑定一个Hibernate (即没有自动创建时Session).withTransaction将启动一个事务并Session在需要时创建一个事务,并在关闭期间保持打开状态.因此,您可以使用它来避免延迟加载异常.在没有事务开销的情况下,我们需要另一种方法来执行此操作,对于那些只是从数据库中读取而不需要事务性写入的情况.但就目前而言,这种方法很有效.但是,如果进行数据库写入,请将代码移动到服务方法.