由于实体脏污检查,SpringBoot/Hibernate在只读事务下触发了来自查找存储库方法的更新查询



我得到了一个执行只读@Transactional服务的非@Transactional测试方法。

当服务执行 repository.findX 操作时,它会引发错误

org.postgresql.util.PSQLException: 错误: 无法在只读事务中执行更新

调试时,我看到错误查询。看起来 Hibernate 在我的查找器执行之前刷新,然后根据某些策略确定实体是否"脏",它只是通过对内存中的所有字段进行更新来刷新底层实体

如何确保在进入@Transactional之前没有挂起的写入操作(只读(?

如果default_transaction_read_only设置为 on,则可以使用START TRANSACTION READ WRITE;启动读写事务

或通过编辑postgresql.conf或使用超级用户命令更改设置

ALTER SYSTEM SET default_transaction_read_only = off;

最新更新