我在没有Hibernate的情况下使用Spring JdbcTemplate。如果方法只执行一个简单的选择或一个简单的插入查询,我应该用@Transactional
注释方法吗?我应该将@Transactional(readonly=true)
用于特定于Oracle的只读方法吗?有什么优点和缺点?
答案 0 :(得分:7)
如果只进行一次简单的选择或一次简单的插入查询,我应该用@Transactional注释方法吗?
是。基本上,每次访问数据库都应该在事务中完成。这是保证ACID属性的原因。即使您现在只有一个查询,明天是什么让您想到,要求或设计不会改变,您又不会有两个问题?你为什么要避免使用交易?
我是否应该将@Transactional(readonly = true)用于特定于Oracle的只读方法?
AFAIK,使用JdbcTemplate,它没有任何值(除了记录该事务应该是只读的),因为您完全可以控制执行哪些查询。
答案 1 :(得分:1)
@Transactional
中没有必要。但是当你编写修改数据的原子逻辑时,你应该使用@Transactional
和JdbcTemplate进行正确的回滚,以防出现任何异常。请注意@JBNizet关于ACID的回答。@Transactional(readonly=true)
可用作底层低级代码的标记或提示,指定可以对只读数据执行所有语句。例如,您可以使用它在主(读写)和从(只读)数据库之间使用RoutingDataSource分发查询。