Это исключение времени выполнения, которое выдается провайдером постоянства, когда транзакция требуется, но не активна. Транзакция требуется, поскольку метод 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();
Примечание. Это близко к псевдокоду, в данном примере обработка исключений отсутствует.