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.

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...