When using @transactional, do I need to use jpatemplate / hibernatetemplate?
No no. Spring has a built-in transaction manager that can be used for simple transactions eg. unless you need to track transactions across multiple DataSource. The configuration should be as simple as this:
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
Where a bean named "dataSource" is some DataSource bean configured elsewhere in your XML file.
However, if you are using JPA or Hibernate it would be nice to use JPATransactionManager or HibernateTransactionManager respectively.
If you really wanted to, you could also use JTA, which is Sun's implementation of the standard transaction. I think the Spring class is called JTATransactionManager.
Using non-Spring because of one transaction managers (the one in the above XML format) will give you the ability to use transactions across multiple data sources.
a source to share
I came across an article that explains the process of implementing a TxManager using @Transactional in depth. If you are interested, you can check this article here. I tried and it works!
a source to share