Обновить базу данных в середине транзакции, возможно? - PullRequest
0 голосов
/ 04 ноября 2010
 
 @Transactional
 public void start() {
  ...
  ...
  int result = entityManager
                .createQuery("update Users set name=" + value + " where user.id=5").executeUpdate();
  .....

 }

Приведенный выше код дает исключение javax.persistence.TransactionRequiredException.

Обновление базы данных в середине транзакции, возможно?

Есть предложения?

Спасибо.

A.

Мне просто интересно, если

1 Ответ

4 голосов
/ 04 ноября 2010

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

Обновление базы данных может быть возможным во время (другой) транзакции. Зависит от таблиц, которые заблокированы активной транзакцией, и от стратегии транзакции. Но в этом случае, похоже, вам нужно для активации транзакции до того, как вы введете метод start.


С JPA вы бы сделали что-то вроде этого:

em = emf.createEntityManager();
tx = em.getTransaction();
tx.begin();   // now a transaction is active
start();      // call your method
// call other methods...
tx.commit();  // now the update is actually done
em.close();

Примечание. Это близко к псевдокоду, в данном примере обработка исключений отсутствует.

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