当事务只读取数据时,我应该避免使用注释@Transactional吗?

Dyl*_*lan 3 java spring hibernate transactions spring-transactions

我已经从旧式的事务管理迁移TransactionProxyFactoryBean到Spring推荐的声明式事务管理,以避免出现不时出现的事务的异常.

对于交易save update delete我添加了注释:

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

它对我有用.

问题是:

@Transactional当事务只读取数据时,我应该避免使用注释吗?

例:

public TradeData getTrade(long tradeId) throws Exception {
   return em.find(TradeData.class, tradeId);
}
Run Code Online (Sandbox Code Playgroud)

看完这篇文章后说:

"更好的是,@Transactional在执行读取操作时完全避免使用注释,如清单10所示:"

我有点困惑,我不太明白.

pau*_*aul 5

如果您的服务的特定方法只是从数据库中读取信息,则可以将其设置为只读

    @Transactional(readOnly = true)
    public Object yourReadOnlyMethod(){}
Run Code Online (Sandbox Code Playgroud)


Tom*_*ere 5

对于只读操作,JDBC您不需要,@Transactional因为它不需要事务,Hibernate是的!所以你可以使用@Transactional(readOnly = true).然后你确定你不会意外更新,删除,插入一些东西.