readOnly = true和TransactionType Never之间有什么区别?

时间:2018-12-27 09:18:48

标签: java spring spring-boot transactions ejb

我正在使用Spring处理事务。实际上,我看到一个示例,其中我们有一个方法使用默认的transactionn方面@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 :(得分:1)

readOnly属性告诉Hibernate和您的数据库您不希望提交任何可能的更改。这将在当前的休眠会话中设置FlushMode.NEVER。即使调用save()方法,数据库中也不会发生任何更改。

Propagation.NEVER,表示Spring将以非事务方式执行该操作,如果存在事务,则将引发Exception。这样可以确保不会创建任何交易。

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