我应该使用@Transactional进行JdbcTemplate的简单查询吗?

时间:2017-09-07 07:26:51

标签: java database spring transactions spring-transactions

我在没有Hibernate的情况下使用Spring JdbcTemplate。如果方法只执行一个简单的选择或一个简单的插入查询,我应该用@Transactional注释方法吗?我应该将@Transactional(readonly=true)用于特定于Oracle的只读方法吗?有什么优点和缺点?

2 个答案:

答案 0 :(得分:7)

  

如果只进行一次简单的选择或一次简单的插入查询,我应该用@Transactional注释方法吗?

是。基本上,每次访问数据库都应该在事务中完成。这是保证ACID属性的原因。即使您现在只有一个查询,明天是什么让您想到,要求或设计不会改变,您又不会有两个问题?你为什么要避免使用交易?

  

我是否应该将@Transactional(readonly = true)用于特定于Oracle的只读方法?

AFAIK,使用JdbcTemplate,它没有任何值(除了记录该事务应该是只读的),因为您完全可以控制执行哪些查询。

答案 1 :(得分:1)

  1. 当你做一个简单的选择时,@Transactional中没有必要。但是当你编写修改数据的原子逻辑时,你应该使用@Transactional和JdbcTemplate进行正确的回滚,以防出现任何异常。请注意@JBNizet关于ACID的回答。
  2. @Transactional(readonly=true)可用作底层低级代码的标记或提示,指定可以对只读数据执行所有语句。例如,您可以使用它在主(读写)和从(只读)数据库之间使用RoutingDataSource分发查询。
相关问题