diff --git a/pom.xml b/pom.xml index 8597ae8..681f37d 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ 4.0.0 http-server - 0.2.31 + 0.2.32 HttpServer jar diff --git a/src/main/java/info/unterrainer/commons/httpserver/GenericHandlerGroup.java b/src/main/java/info/unterrainer/commons/httpserver/GenericHandlerGroup.java index 26a90ff..8a47eff 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/GenericHandlerGroup.java +++ b/src/main/java/info/unterrainer/commons/httpserver/GenericHandlerGroup.java @@ -184,6 +184,7 @@ private void fullUpdate(final Context ctx) throws IOException { DaoTransaction transaction = dao.getTransactionManager().beginTransaction(ctx); P jpa = hu.getJpaById(ctx, transaction.getManager(), dao); try { + P detachedJpa = orikaMapper.map(jpa, jpaType); J json = jsonMapper.fromStringTo(jsonType, ctx.attribute(Attribute.REQUEST_BODY)); P mappedJpa = orikaMapper.map(json, jpaType); mappedJpa.setId(jpa.getId()); @@ -192,11 +193,12 @@ private void fullUpdate(final Context ctx) throws IOException { mappedJpa = extensions.runPreModify(ctx, makeAsyncExtensionContextFor(ctx), transaction.getManager(), jpa.getId(), json, jpa, mappedJpa, executorService); + P persistedJpa = dao.update(transaction.getManager(), mappedJpa, hu.getReadTenantIdsFrom(ctx)); J r = orikaMapper.map(persistedJpa, jsonType); r = extensions.runPostModify(ctx, makeAsyncExtensionContextFor(ctx), transaction.getManager(), jpa.getId(), - json, jpa, mappedJpa, persistedJpa, r, executorService); + json, detachedJpa, mappedJpa, persistedJpa, r, executorService); ctx.attribute(Attribute.RESPONSE_OBJECT, r); diff --git a/src/main/java/info/unterrainer/commons/httpserver/daos/SingleQueryBuilder.java b/src/main/java/info/unterrainer/commons/httpserver/daos/SingleQueryBuilder.java index b20b833..72956ce 100644 --- a/src/main/java/info/unterrainer/commons/httpserver/daos/SingleQueryBuilder.java +++ b/src/main/java/info/unterrainer/commons/httpserver/daos/SingleQueryBuilder.java @@ -1,5 +1,6 @@ package info.unterrainer.commons.httpserver.daos; +import java.util.List; import java.util.Map; import java.util.function.Function; @@ -30,6 +31,22 @@ protected V withEntityManager(final Function func) { * @return the selected entity */ public P get() { + return withEntityManager(em -> { + List

resultList = dao.coreDao + .getQuery(em, "o", null, "o.id = :id", Map.of("id", id), dao.type, null, false, null, readTenantIds) + .getResultList(); + if (resultList.isEmpty()) + return null; + return resultList.get(0); + }); + } + + /** + * Get the selected entity or throw an exception if it wasn't found. + * + * @return the selected entity + */ + public P getOrException() { return withEntityManager(em -> dao.coreDao .getQuery(em, "o", null, "o.id = :id", Map.of("id", id), dao.type, null, false, null, readTenantIds) .getSingleResult());