3
3
import io .hypersistence .utils .hibernate .type .json .JsonType ;
4
4
import jakarta .persistence .EntityManager ;
5
5
import jakarta .persistence .PersistenceContext ;
6
+ import jakarta .persistence .PersistenceContextType ;
6
7
import org .commonwl .view .git .GitDetails ;
7
8
import org .hibernate .query .Query ;
9
+ import org .springframework .transaction .annotation .Transactional ;
8
10
9
11
public class QueuedWorkflowRepositoryImpl implements QueuedWorkflowRepositoryCustom {
10
12
11
- // Tested this query directly, and it works! Problem is elsewhere!
12
13
private static final String QUERY_FIND_BY_RETRIEVED_FROM =
13
14
"SELECT q.* FROM queued_workflow q WHERE q.temp_representation -> 'retrievedFrom' = :retrievedFrom" ;
14
15
15
16
private static final String QUERY_DELETE_BY_RETRIEVED_FROM =
16
17
"DELETE FROM queued_workflow q WHERE q.temp_representation -> 'retrievedFrom' = :retrievedFrom" ;
17
18
18
- @ PersistenceContext EntityManager entityManager ;
19
+ @ PersistenceContext (type = PersistenceContextType .EXTENDED )
20
+ EntityManager entityManager ;
19
21
20
22
@ Override
21
23
public QueuedWorkflow findByRetrievedFrom (GitDetails retrievedFrom ) {
@@ -27,22 +29,30 @@ public QueuedWorkflow findByRetrievedFrom(GitDetails retrievedFrom) {
27
29
// out of ideas, so started testing everything found online):
28
30
// Use `new JsonType(GitDetails.class)`. That finally solved it.
29
31
// Ref: https://github.com/common-workflow-language/cwlviewer/pull/568
30
- return ( QueuedWorkflow )
32
+ final Query <?> query =
31
33
entityManager
32
34
.createNativeQuery (QUERY_FIND_BY_RETRIEVED_FROM , QueuedWorkflow .class )
33
- .unwrap (Query .class )
34
- .setParameter ("retrievedFrom" , retrievedFrom , new JsonType (GitDetails .class ))
35
- .stream ()
36
- .findFirst ()
37
- .orElse (null );
35
+ .unwrap (Query .class );
36
+
37
+ if (query == null ) {
38
+ return null ;
39
+ }
40
+
41
+ query .setParameter ("retrievedFrom" , retrievedFrom , new JsonType (GitDetails .class ));
42
+ return (QueuedWorkflow ) query .uniqueResult ();
38
43
}
39
44
45
+ @ Transactional
40
46
@ Override
41
47
public void deleteByTempRepresentation_RetrievedFrom (GitDetails retrievedFrom ) {
42
- entityManager
43
- .createNativeQuery (QUERY_DELETE_BY_RETRIEVED_FROM , QueuedWorkflow .class )
44
- .unwrap (Query .class )
45
- .setParameter ("retrievedFrom" , retrievedFrom , new JsonType (GitDetails .class ))
46
- .executeUpdate ();
48
+ final Query <?> query =
49
+ entityManager
50
+ .createNativeQuery (QUERY_DELETE_BY_RETRIEVED_FROM , QueuedWorkflow .class )
51
+ .unwrap (Query .class );
52
+
53
+ if (query != null ) {
54
+ query .setParameter ("retrievedFrom" , retrievedFrom , new JsonType (GitDetails .class ));
55
+ query .executeUpdate ();
56
+ }
47
57
}
48
58
}
0 commit comments