微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – Spring @Transactional只读模式回滚行为

我有一些@Transactional服务层方法(readOnly = true),这个方法经常导致一些RuntimeException(假设它是一些NotFoundException异常).

我也在使用ORM Hibernate进行数据库交互过程.

这样做是否合法?

在这种情况下,“回滚”行为意味着什么是认行为?它能否以某种方式严重影响连接的状态或导致任何问题?

这不是“为什么不亲自尝试?”.我怀疑这可能会导致事务回滚,因为在一些异常之后,它在同一方法中被标记为仅回滚错误.这可能是非常具体的JDBC Postgresql驱动程序错误.这就是为什么我一般都在想这个设计:这样做是合法的还是非法的?

解决方法:

据我了解,你担心回滚.在这种情况下,readOnly是一个select语句,通常没有任何内容可以从读取中回滚.这个方便的唯一地方是当你在锁定下阅读时,当事务结束时你释放锁定.

AFAIK readOnly会将flushmode设置为FlushMode.NEVER,同时又好又坏.好,因为没有脏检查,如here所述.不好因为如果在readOnly事务中调用读/写事务,事务将无提示失败,因为会话未刷新.这很容易被测试 – 我希望事情没有改变,因为我已经尝试过了.

然后是连接池.我知道C3P0的认策略是回滚任何未提交的工作.控制它的标志是autoCommitOnClose.

然后是this link关于readOnly和postgres – 我没有合作过,也无法真正说出我的看法.

现在,关于事务已回滚,因为它已被标记为仅回滚.对于readOnly事务,可能没有像我之前所说的那样回滚,所以这实际上取决于你如何链接你的@Transactional方法IMO.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐