繁体   English   中英

@Transactional和@Transactional(readOnly = true)有什么区别

[英]what is the difference between @Transactional and @Transactional(readOnly=true)

谁能告诉我@Transactional@Transactional(readOnly = true)在spring / hibernate有什么区别。

为什么我们需要在Service层而不是DAO层中使用@ Transactional / @ Transactional(readOnly = true)批注?

请指教

从Spring文档中:

如果事务是只读的,则为true。 默认为false。

这只是对实际交易子系统的提示。 它不一定会导致写访问尝试失败。 当请求只读事务时,无法解释只读提示的事务管理器不会引发异常,而会默默地忽略该提示。

这意味着,如果将readOnly标志设置为“ true”,则仅作为事务子系统的提示,即您的事务将不会尝试修改任何数据。

@Transactional批注主要用于服务层,因为您的业务方法可以包含许多DAO方法调用,您可能希望在一个事务中进行处理。

已经问过这个问题,您可以在这里阅读更多信息: “ @Transactional”应放在哪里服务层或DAO

@Transactional vs @Transactional(readOnly=true)

默认情况下,boolean readOnly是默认值,这意味着@Transactional = @Transactional(readOnly=false) ,这实际上意味着您在暗示该方法将需要写访问权限。 对于不需要数据修改的方法,您可以使用readOnly=true对其进行注释。 不过,这并不意味着使用注释会自动为您处理该问题-您仍然需要设置实体管理器等来有效地使用它。 查看此页面以获取更多信息。

我们将批注放在服务层而不是DAO层上的一个主要原因是,我们通常在服务层上定义业务逻辑,并且逻辑可能需要多个数据库交互,并将其放在服务层上封装了所有数据库调用将在一个事务中完成(例如,如果失败,则对所有数据库调用回滚,等等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM