如果我在DAO中使用@Transactional,我所有的EntityManager查询是否都将用commit和close封装?还是我需要使用Spring模板(JPA模板,Hibernate模板)?使用@Transactional和Spring模板有什么区别?
使用基于注释的事务划分(@Transactional
)和TransactionTemplate
之间的区别是TransactionTemplate
将您与Spring的事务基础结构耦合,这意味着如果应回滚事务,您将以编程方式处理设置事务状态。您可以将基于批注的事务划分与Spring事务支持一起使用,也可以与Spring容器外部的AspectJ事务一起使用。
Spring模板类仅在此处提供用于执行持久性操作的更好的API-它们不处理事务。如果要进行事务处理操作,则需要使用@Transactional批注方法或使用TransactionTemplate。
当您在正确的Spring配置中使用@transactional时,Spring将认识到该方法需要事务,并将为您处理事务的创建,提交和关闭。
就像skaffman所说,@ transactional并不直接与模板类绑定。它们可用于可能需要交易的任何类。
您是说usin @transactional将使用commit,close或使用spring事务模板(jpatemplate,hibernatetemplate)封装我的dao方法吗?