Я использую JPA-Toplink и разрабатываю веб-приложение RESTful.
Здесь стоит упомянуть одну вещь.
Не используется JTA
Таким образом, мой файл persistences.xml определен как не использующий JTA.
<persistence-unit name="kojoPU">
<provider>oracle.toplink.essentials.PersistenceProvider</provider>
<non-jta-data-source>machinePrototype</non-jta-data-source>
Это позволяет менеджеру сущностей не выполнять запрос сразу с помощью executeUpdate (). Он будет ждать до принятия.
em.getTransaciton().begin();
Query query = em.createNativeQuery("DELETE FROM table1 WHERE theId = 10;");
query.executeUpdate(); //not yet executed until transaction is commited.
//continue do something...
em.getTransaction().commit(); //the query above is executed here finally
Но после транзакции.begin () есть одна большая проблема: есть какая-либо ошибка, например JSONException
или indexOutOfBoundsException
, , транзакция не закрыта и некоторое время остается открытой.
Можно ли как-то принудительно закрыть транзакцию в таком случае?