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

时间:2015-07-02 08:37:32

标签: 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);
}

阅读this文章,其中写道:

  

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

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

2 个答案:

答案 0 :(得分:5)

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

    @Transactional(readOnly = true)
    public Object yourReadOnlyMethod(){}

答案 1 :(得分:5)

对于使用JDBC的只读操作,您不需要@Transactional,因为它不需要进行交易,Hibernate会这样做!所以你可以使用@Transactional(readOnly = true)。那么你确定你不会意外地更新,删除,插入一些东西。