我使用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();
    }

最佳答案

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

关于java - readOnly = true和TransactionType Never之间有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53942580/

10-09 05:43