В чем разница между readOnly = true и TransactionType Никогда? - PullRequest
0 голосов
/ 27 декабря 2018

Я использую Spring для обработки своих транзакций. На самом деле, я видел пример, в котором у нас есть метод, который делает поиск по таблице с использованием аспекта по умолчанию транзакции @RequiredNew с readOnly = true.

    @Override
    @Transactional(readOnly = true)
    public E findAll(E entity) {
        return repository.save(entity);
    }

Мой вопрос: почему бы не делать так и какая разница?

@Transactional(propagation = Propagation.NEVER)
    @Override
    public Iterable<E> findAll() {
        return repository.findAll();
    }

1 Ответ

0 голосов
/ 27 декабря 2018

Свойство readOnly сообщает и Hibernate, и вашей базе данных, что вы не хотите, чтобы любые возможные изменения были зафиксированы.Это устанавливает FlushMode.NEVER в текущем сеансе Hibernate.Даже если вы вызываете метод save (), никаких изменений в вашей базе данных не произойдет.

Propagation.NEVER, означает, что Spring выполнит операцию без транзакций и сгенерирует исключение, если транзакция существует.Это гарантирует, что транзакция не будет создана.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Propagation.html

...