SpringBoot / Hibernate инициирует обновление запросов из метода find репозитория в транзакции только для чтения из-за проверки загрязненности сущностей - PullRequest
0 голосов
/ 18 октября 2018

Я получил не-1001 * тестовый метод, который выполняет службу только для чтения @Transactional.

Когда служба выполняет операцию repository.findX, она выдает ошибку

org.postgresql.util.PSQLException: ОШИБКА: невозможно выполнить ОБНОВЛЕНИЕ в транзакции только для чтения

При отладке я вижу запрос об ошибке.Похоже, Hibernate сбрасывает перед выполнением моего поиска, а затем, чтобы определить, является ли объект "грязным" или нет, в зависимости от определенной стратегии, он просто обновляет базовый объект путем обновления всех полей в памяти

Как я могу убедиться, что ни одна операция записи не ожидает, прежде чем я войду в @Transactional (только чтение) ??

1 Ответ

0 голосов
/ 18 октября 2018

Если установлено значение default_transaction_read_only, вы можете запустить транзакцию чтения-записи с помощью START TRANSACTION READ WRITE;

или изменить настройку, отредактировав postgresql.conf или с помощью команды суперпользователя

* 1007.*
...