我希望在春季启动时使用@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 ;
}
}
答案 0 :(得分:2)
我的问题的原因交易不起作用是在同一个类中混合AspectJ建议和事务,因此此选项@EnableTransactionManagement(proxyTargetClass=true)
强制交易工作但是,即使您将它们放在专用类中,也禁用AspectJ建议。
因此,针对此问题的最佳解决方案是将AspectJ建议放在专用的类中,因此Transactions和AspectJ建议将按预期工作。