[OLINGO-1269] Release database connection when updating a not-existed entity
diff --git a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
index e8f3070..2aaef0d 100644
--- a/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
+++ b/odata2-jpa-processor/jpa-core/src/main/java/org/apache/olingo/odata2/jpa/processor/core/access/data/JPAProcessorImpl.java
@@ -365,8 +365,9 @@
final InputStream content, final Map<String, Object> properties, final String requestContentType)
throws ODataJPAModelException, ODataJPARuntimeException {
Object jpaEntity = null;
+ boolean isLocalTransaction = false;
try {
- boolean isLocalTransaction = setTransaction();
+ isLocalTransaction = setTransaction();
jpaEntity = readEntity(new JPAQueryBuilder(oDataJPAContext).build(updateView));
if (jpaEntity == null) {
@@ -402,6 +403,10 @@
em.getTransaction().rollback();
throw ODataJPARuntimeException.throwException(
ODataJPARuntimeException.ERROR_JPQL_QUERY_CREATE, e);
+ } finally {
+ if (isLocalTransaction && oDataJPAContext.getODataJPATransaction().isActive()) {
+ oDataJPAContext.getODataJPATransaction().rollback();
+ }
}
return jpaEntity;
}