私はJPAToplinkを使用しています-必須でRESTfulWebアプリを開発しています。
ここで最初に言及することが1つあります。
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
JSONException
しかし、transaction.begin()の後に、またはindexOutOfBoundsException
のようなエラーがあるという大きな問題が1つあります。トランザクションは閉じられず、しばらく開いたままになります。
そのような場合、どういうわけかトランザクションを強制的に閉じることは可能ですか?