Skip to content

Commit e4c499b

Browse files
author
Gerald Unterrainer
committed
fixing asyncDao Jpql parameters
1 parent 01a6513 commit e4c499b

File tree

3 files changed

+32
-48
lines changed

3 files changed

+32
-48
lines changed

Diff for: pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
<modelVersion>4.0.0</modelVersion>
1919
<artifactId>http-server</artifactId>
20-
<version>0.2.22</version>
20+
<version>0.2.23</version>
2121
<name>HttpServer</name>
2222
<packaging>jar</packaging>
2323

Diff for: src/main/java/info/unterrainer/commons/httpserver/daos/JpqlCoreDao.java

+29-46
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.Map.Entry;
99
import java.util.Set;
1010
import java.util.function.Function;
11+
import java.util.stream.Collectors;
1112

1213
import javax.persistence.EntityManager;
1314
import javax.persistence.EntityManagerFactory;
@@ -16,6 +17,8 @@
1617
import javax.persistence.Query;
1718
import javax.persistence.TypedQuery;
1819

20+
import org.mapstruct.ap.internal.util.Strings;
21+
1922
import info.unterrainer.commons.httpserver.exceptions.ForbiddenException;
2023
import info.unterrainer.commons.httpserver.exceptions.InternalServerErrorException;
2124
import info.unterrainer.commons.httpserver.jsons.ListJson;
@@ -24,7 +27,9 @@
2427
import info.unterrainer.commons.rdbutils.enums.AsyncState;
2528
import io.javalin.http.Context;
2629
import lombok.Getter;
30+
import lombok.extern.slf4j.Slf4j;
2731

32+
@Slf4j
2833
public class JpqlCoreDao<P extends BasicJpa> implements CoreDao<P, EntityManager> {
2934

3035
protected final Class<P> type;
@@ -136,6 +141,7 @@ <T> TypedQuery<T> getQuery(final EntityManager em, final String selectClause, St
136141
else if (!orderBy.isBlank())
137142
query += " ORDER BY " + orderBy;
138143

144+
log.debug("Query is: [{}]", query);
139145
query = String.format(query, this.type.getSimpleName());
140146

141147
@SuppressWarnings("unchecked")
@@ -146,12 +152,24 @@ else if (!orderBy.isBlank())
146152
TypedQuery<T> q = em.createQuery(query, t);
147153
if (lockPessimistic)
148154
q.setLockMode(LockModeType.PESSIMISTIC_WRITE);
149-
q = addAsyncStatesParamsToQuery(asyncStates, q);
155+
156+
log.debug(" with lockmode: [{}]", q.getLockMode());
157+
158+
if (asyncStates != null)
159+
log.debug(" with asynchronous_state: [{}]",
160+
Strings.join(asyncStates.stream().map(AsyncState::toString).collect(Collectors.toList()), ", "));
161+
addAsyncStatesParamsToQuery(asyncStates, q);
150162

151163
params = addTenantParams(params, tenantIds);
152-
if (params != null)
164+
if (params != null) {
165+
log.debug(" with parameters: [{}]",
166+
Strings.join(params.entrySet()
167+
.stream()
168+
.map(e -> e.getKey() + ": " + e.getValue().toString())
169+
.collect(Collectors.toList()), ", "));
153170
for (Entry<String, Object> e : params.entrySet())
154171
q.setParameter(e.getKey(), e.getValue());
172+
}
155173
return q;
156174
}
157175

@@ -174,7 +192,7 @@ Query getCountQuery(final EntityManager em, final String selectClause, String jo
174192

175193
Query q = em.createQuery(String.format(query, this.type.getSimpleName()));
176194

177-
q = addAsyncStatesParamsToQuery(asyncStates, q);
195+
addAsyncStatesParamsToQuery(asyncStates, q);
178196
if (params != null)
179197
for (Entry<String, Object> e : params.entrySet())
180198
q.setParameter(e.getKey(), e.getValue());
@@ -269,53 +287,18 @@ private String buildWhereClause(final String whereClause, final Set<AsyncState>
269287
if (isSet(whereClause) && !isSet(asyncStates))
270288
r += whereClause;
271289

272-
if (!isSet(whereClause) && isSet(asyncStates))
273-
r += addAsyncStatesToWhereClause(asyncStates);
274-
275-
if (isSet(whereClause) && isSet(asyncStates))
276-
r += "( " + whereClause + " ) AND ( " + addAsyncStatesToWhereClause(asyncStates) + " )";
277-
278-
return r;
279-
}
280-
281-
private String addAsyncStatesToWhereClause(final Set<AsyncState> asyncStates) {
282-
StringBuilder sb = new StringBuilder();
283-
boolean isFirst = true;
284-
285-
for (int i = 0; i < asyncStates.size(); i++) {
286-
if (isFirst)
287-
isFirst = false;
288-
else
289-
sb.append(" OR ");
290-
sb.append("state = :state");
291-
sb.append(i);
290+
if (isSet(asyncStates)) {
291+
if (isSet(whereClause))
292+
r += "( " + whereClause + " ) AND ";
293+
r += "( o.state IN :asynchronous_state )";
292294
}
293295

294-
return sb.toString();
295-
}
296-
297-
private <T> TypedQuery<T> addAsyncStatesParamsToQuery(final Set<AsyncState> asyncStates,
298-
final TypedQuery<T> query) {
299-
300-
if (!isSet(asyncStates))
301-
return query;
302-
303-
int count = 0;
304-
for (AsyncState state : asyncStates)
305-
query.setParameter("state" + count++, state);
306-
307-
return query;
296+
return r;
308297
}
309298

310-
private Query addAsyncStatesParamsToQuery(final Set<AsyncState> asyncStates, final Query query) {
311-
299+
private void addAsyncStatesParamsToQuery(final Set<AsyncState> asyncStates, final Query query) {
312300
if (!isSet(asyncStates))
313-
return query;
314-
315-
int count = 0;
316-
for (AsyncState state : asyncStates)
317-
query.setParameter("state" + count++, state);
318-
319-
return query;
301+
return;
302+
query.setParameter("asynchronous_state", asyncStates);
320303
}
321304
}

Diff for: src/main/java/info/unterrainer/commons/httpserver/daos/ListQuery.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ public List<T> getList() {
116116
public List<T> getList(final long offset, final long size) {
117117
return withEntityManager(em -> {
118118
TypedQuery<T> query = builder.getTypedQuery(em);
119-
return builder.getDao().getList(em, query, offset, size);
119+
List<T> list = builder.getDao().getList(em, query, offset, size);
120+
return list;
120121
});
121122
}
122123

0 commit comments

Comments
 (0)