8
8
import java .util .Map .Entry ;
9
9
import java .util .Set ;
10
10
import java .util .function .Function ;
11
+ import java .util .stream .Collectors ;
11
12
12
13
import javax .persistence .EntityManager ;
13
14
import javax .persistence .EntityManagerFactory ;
16
17
import javax .persistence .Query ;
17
18
import javax .persistence .TypedQuery ;
18
19
20
+ import org .mapstruct .ap .internal .util .Strings ;
21
+
19
22
import info .unterrainer .commons .httpserver .exceptions .ForbiddenException ;
20
23
import info .unterrainer .commons .httpserver .exceptions .InternalServerErrorException ;
21
24
import info .unterrainer .commons .httpserver .jsons .ListJson ;
24
27
import info .unterrainer .commons .rdbutils .enums .AsyncState ;
25
28
import io .javalin .http .Context ;
26
29
import lombok .Getter ;
30
+ import lombok .extern .slf4j .Slf4j ;
27
31
32
+ @ Slf4j
28
33
public class JpqlCoreDao <P extends BasicJpa > implements CoreDao <P , EntityManager > {
29
34
30
35
protected final Class <P > type ;
@@ -136,6 +141,7 @@ <T> TypedQuery<T> getQuery(final EntityManager em, final String selectClause, St
136
141
else if (!orderBy .isBlank ())
137
142
query += " ORDER BY " + orderBy ;
138
143
144
+ log .debug ("Query is: [{}]" , query );
139
145
query = String .format (query , this .type .getSimpleName ());
140
146
141
147
@ SuppressWarnings ("unchecked" )
@@ -146,12 +152,24 @@ else if (!orderBy.isBlank())
146
152
TypedQuery <T > q = em .createQuery (query , t );
147
153
if (lockPessimistic )
148
154
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 );
150
162
151
163
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 ()), ", " ));
153
170
for (Entry <String , Object > e : params .entrySet ())
154
171
q .setParameter (e .getKey (), e .getValue ());
172
+ }
155
173
return q ;
156
174
}
157
175
@@ -174,7 +192,7 @@ Query getCountQuery(final EntityManager em, final String selectClause, String jo
174
192
175
193
Query q = em .createQuery (String .format (query , this .type .getSimpleName ()));
176
194
177
- q = addAsyncStatesParamsToQuery (asyncStates , q );
195
+ addAsyncStatesParamsToQuery (asyncStates , q );
178
196
if (params != null )
179
197
for (Entry <String , Object > e : params .entrySet ())
180
198
q .setParameter (e .getKey (), e .getValue ());
@@ -269,53 +287,18 @@ private String buildWhereClause(final String whereClause, final Set<AsyncState>
269
287
if (isSet (whereClause ) && !isSet (asyncStates ))
270
288
r += whereClause ;
271
289
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 )" ;
292
294
}
293
295
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 ;
308
297
}
309
298
310
- private Query addAsyncStatesParamsToQuery (final Set <AsyncState > asyncStates , final Query query ) {
311
-
299
+ private void addAsyncStatesParamsToQuery (final Set <AsyncState > asyncStates , final Query query ) {
312
300
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 );
320
303
}
321
304
}
0 commit comments