2015-02-03 4 views
1

Я ищу использовать @Transactional в весенней загрузке, но после нескольких попыток я не могу заставить транзакцию работать, несмотря на то, что внутри есть исключение, чтобы откатить, так что я пропускаю что-то?@Transactional не работает весной Boot

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

«несмотря на исключение внутри для отката» - конечно, транзакция откатится, если произошло исключение – gknicker

+0

в моем случае это не откат. – geogeek

+1

Не так много, но вы можете поделиться проектом, который демонстрирует проблему. Так как ваша служба 'Metier' не реализует интерфейс, мне интересно, нужен ли вам' @EnableTransactionManagement (proxyTargetClass = true) '? –

ответ

2

Причиной для моих проблемных сделок не работает перемешивает AspectJ советы и операции в том же классе, так что этот вариант @EnableTransactionManagement(proxyTargetClass=true) Заставляет транзакции работать, но отключает советы AspectJ, даже если вы поместите их в выделенный класс.

Таким образом, лучшим решением для этой проблемы являются советы AspectJ в специальном классе, поэтому транзакции и советы AspectJ будут работать, как и ожидалось.

 Смежные вопросы

  • Нет связанных вопросов^_^