2010-07-21 3 views
2

У меня проблема:JPA Сущность не сохраняется после исключения

У меня есть 2 класса (A и B). Класс A имеет метод (method1), аннотированный с помощью @Transaction(noRollBackFor = ExceptionB.class), который вызывает метод2 из класса B. ExceptionB - это не проверенное исключение RunTimeException.

public class A { 
    ... 

    @Resource 
    private B b; 

    @Transaction(noRollBackFor = ExceptionB.class) 
    public void method1() { 

     try { 
      b.method2(); 
     } catch (ExceptionB e) { 
      // Change objects annotated with @Entity (must be persisted) 
      throw e; 
     } 

    } 
} 

@Transaction 
public class B { 
    ... 

    public void method2() { 
      ... 
      throw new ExceptionB(); 
    } 
} 

Однако, когда класс B бросает исключение, пружина перехватчик получает исключение и использует правила транзакции аннотаций класса В (что уже не надо правило noRollBackFor) и сделать откат транзакции. Таким образом, все изменения, выполненные в методе 1, не сохраняются. Что я должен изменить на откат, не произойдет?

Заранее спасибо.

ответ

0

Ну, я уже решил свою проблему. Дело в том, что класс B был аннотирован @Transaction, поэтому для каждого публичного метода, называемого (например, method2), новая транзакция была создана без свойства noRollBack. Таким образом, для моего случая решение выдает аннотацию @Transaction из класса и добавляет ее только к методам, которым требуется новая транзакция, т. Е. Метод2 не содержит аннотаций.

Это все!

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