JPA Entity не сохраняется после исключения - PullRequest
2 голосов
/ 21 июля 2010

У меня следующая проблема:

У меня есть 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 выдает исключение,Spring Interceptor получает исключение и использует правила аннотаций транзакции класса B (которые не имеют правила noRollBackFor) и выполняет откат транзакции.Таким образом, все изменения, сделанные в method1, не сохраняются.Что я должен изменить, чтобы откат не произошел?

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

1 Ответ

0 голосов
/ 21 июля 2010

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

Вот и все!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...