gpt4 book ai didi

hibernate - grails中的withTransaction和withSession有什么区别?

转载 作者:行者123 更新时间:2023-12-03 21:20:58 26 4
gpt4 key购买 nike

我知道一个获取基础 session ,另一个获取对当前事务状态的引用;但是,它们之间有什么区别以及每个示例用例是什么?

我的要求是在服务方法 block 中批量保存一些记录。

最佳答案

withTransaction有点骇人听闻,因为它允许您在任何地方进行事务性工作,但最好将您的关注点分开并在事务性服务中完成工作。除非您添加 static transactional = false,否则默认情况下服务是事务性的。并且可以使用 @Transactional 在类和/或方法级别进行微调注解。不使用 withTransaction 将代码放在服务方法中应该没问题或 withSession .
withSession是访问当前 Hibernate Session 的便捷方式(通常是由 OpenSessionInView 拦截器注册的那个)。如果你想清除 session ,或者做其他 GORM 未公开的工作,这是一种无需访问 sessionFactory 即可访问它的方法。或 Spring 使用的线程本地持有者。
withTransaction 的一种比较有效的用法在事务服务方法之外是绑定(bind) Hibernate Session当您在 Controller 请求之外时(即没有自动创建的 Session 时)。 withTransaction将启动一个事务并创建一个 Session如果需要,并在关闭期间保持打开状态。因此,您可以使用它来避免延迟加载异常。我们需要另一种方法来做到这一点,而不需要事务的开销,对于那些你只是从数据库中读取而不需要事务性写入的情况。但就目前而言,这种方法有效。但是,如果您执行数据库写入,请将代码移动到服务方法。

关于hibernate - grails中的withTransaction和withSession有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19691758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com