我正在使用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();
}
答案 0 :(得分:1)
readOnly属性告诉Hibernate和您的数据库您不希望提交任何可能的更改。这将在当前的休眠会话中设置FlushMode.NEVER。即使调用save()方法,数据库中也不会发生任何更改。
Propagation.NEVER,表示Spring将以非事务方式执行该操作,如果存在事务,则将引发Exception。这样可以确保不会创建任何交易。