有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SpringBoot/Hibernate在只读事务下触发来自find repository方法的更新查询,这是由于实体脏度检查

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

当服务正在执行存储库时。findX操作时,它会抛出一个错误

org.postgresql.util.PSQLException: ERROR: cannot execute UPDATE in a read-only transaction

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

在进入@Transactional(只读)之前,如何确保没有写操作处于挂起状态


共 (1) 个答案

  1. # 1 楼答案

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

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

    ALTER SYSTEM SET default_transaction_read_only = off;