@Transactional在Spring Boot中不起作用

时间:2015-02-03 16:49:29

标签: java spring hibernate transactions spring-boot

我希望在春季启动时使用@Transactional,但经过多次尝试后,尽管内部有例外回滚,我仍无法使交易正常工作,所以我错过了什么?

AppConfig.java

@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.geopro" })
@EnableJpaRepositories(basePackages = { "com.geopro.repositories" })
@EntityScan(basePackages = { "com.geopro.entities" })
@EnableTransactionManagement
public class AppConfig {
    @Bean
    public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
         HibernateJpaSessionFactoryBean factory = new HibernateJpaSessionFactoryBean();
         factory.setEntityManagerFactory(emf);
         return factory;
    }
}

Metier.java

@Service("metier")
@Aspect
public class Metier {


    @Transactional(readOnly = false , rollbackFor = Exception.class)
    public void saveUpload(UploadData post) throws Exception {
        try {
            post.ADDEDDATA.savesync();
            post.UPDATEDDATA.savesync();

        } catch (Exception e) {
               throw e ;
        }

    }

1 个答案:

答案 0 :(得分:2)

我的问题的原因交易不起作用是在同一个类中混合AspectJ建议和事务,因此此选项@EnableTransactionManagement(proxyTargetClass=true)强制交易工作但是,即使您将它们放在专用类中,也禁用AspectJ建议。

因此,针对此问题的最佳解决方案是将AspectJ建议放在专用的类中,因此Transactions和AspectJ建议将按预期工作。