17
17
18
18
import io .vertx .junit5 .Timeout ;
19
19
import io .vertx .junit5 .VertxTestContext ;
20
- import jakarta .persistence .CascadeType ;
21
20
import jakarta .persistence .Entity ;
22
- import jakarta .persistence .FetchType ;
23
21
import jakarta .persistence .GeneratedValue ;
24
22
import jakarta .persistence .Id ;
25
23
import jakarta .persistence .ManyToOne ;
35
33
import jakarta .persistence .Transient ;
36
34
import jakarta .persistence .Version ;
37
35
36
+ import static jakarta .persistence .CascadeType .MERGE ;
37
+ import static jakarta .persistence .CascadeType .PERSIST ;
38
+ import static jakarta .persistence .CascadeType .REFRESH ;
39
+ import static jakarta .persistence .CascadeType .REMOVE ;
40
+ import static jakarta .persistence .FetchType .EAGER ;
41
+ import static jakarta .persistence .FetchType .LAZY ;
38
42
import static java .util .concurrent .TimeUnit .MINUTES ;
39
43
import static org .junit .jupiter .api .Assertions .assertEquals ;
40
44
import static org .junit .jupiter .api .Assertions .assertFalse ;
@@ -55,119 +59,129 @@ protected Configuration constructConfiguration() {
55
59
56
60
@ Test
57
61
public void testQuery (VertxTestContext context ) {
58
-
59
- Node basik = new Node ("Child" );
60
- basik .parent = new Node ( "Parent" );
61
- basik .elements .add (new Element (basik ) );
62
- basik .elements .add (new Element (basik ) );
63
- basik . elements . add ( new Element ( basik ));
64
-
65
- test ( context ,
62
+ Node basik = new Node ( "Child" );
63
+ basik . parent = new Node ( "Parent" );
64
+ basik .elements . add ( new Element ( basik ) );
65
+ basik .elements .add ( new Element ( basik ) );
66
+ basik .elements .add ( new Element ( basik ) );
67
+
68
+ test (
69
+ context ,
66
70
openSession ()
67
- .thenCompose (s -> s .persist (basik ).thenCompose (v -> s .flush ()) )
71
+ .thenCompose ( s -> s .persist ( basik ).thenCompose ( v -> s .flush () ) )
68
72
.thenCompose ( v -> openSession () )
69
- .thenCompose ( s -> s .createQuery ( "select distinct n from Node n left join fetch n.elements" ).getResultList ())
73
+ .thenCompose ( s -> s .createSelectionQuery ( "select distinct n from Node n left join fetch n.elements" , Node . class ).getResultList () )
70
74
.thenAccept ( list -> assertEquals ( list .size (), 2 ) )
71
75
.thenCompose ( v -> openSession () )
72
- .thenCompose ( s -> s .createQuery ( "select distinct n, e from Node n join n.elements e" ).getResultList ())
76
+ .thenCompose ( s -> s .createSelectionQuery ( "select distinct n, e from Node n join n.elements e" , Object []. class ).getResultList () )
73
77
.thenAccept ( list -> assertEquals ( list .size (), 3 ) )
74
78
.thenCompose ( v -> openSession () )
75
- .thenCompose ( s -> s .createQuery ( "select distinct n.id, e.id from Node n join n.elements e" ).getResultList ())
79
+ .thenCompose ( s -> s .createSelectionQuery ( "select distinct n.id, e.id from Node n join n.elements e" , Object []. class ).getResultList () )
76
80
.thenAccept ( list -> assertEquals ( list .size (), 3 ) )
77
81
.thenCompose ( v -> openSession () )
78
- .thenCompose ( s -> s .createQuery ( "select max(e.id), min(e.id), sum(e.id) from Node n join n.elements e group by n.id order by n.id" ).getResultList ())
82
+ .thenCompose ( s -> s .createSelectionQuery ( "select max(e.id), min(e.id), sum(e.id) from Node n join n.elements e group by n.id order by n.id" , Object []. class ).getResultList () )
79
83
.thenAccept ( list -> assertEquals ( list .size (), 1 ) )
80
84
);
81
85
}
82
86
83
87
@ Test
84
88
public void testCascade (VertxTestContext context ) {
85
-
86
- Node basik = new Node ("Child" );
87
- basik .parent = new Node ( "Parent" );
88
- basik .elements .add ( new Element (basik ) );
89
- basik .elements .add ( new Element (basik ) );
90
- basik . elements . add ( new Element ( basik ) );
91
-
92
- test ( context ,
89
+ Node basik = new Node ( "Child" );
90
+ basik . parent = new Node ( "Parent" );
91
+ basik .elements . add ( new Element ( basik ) );
92
+ basik .elements .add ( new Element ( basik ) );
93
+ basik .elements .add ( new Element ( basik ) );
94
+
95
+ test (
96
+ context ,
93
97
openSession ()
94
- .thenCompose (s -> s .persist (basik )
95
- .thenApply (v -> { assertTrue (basik .prePersisted && !basik .postPersisted ); return s ; } )
96
- .thenApply (v -> { assertTrue (basik .parent .prePersisted && !basik .parent .postPersisted ); return s ; } )
97
- .thenCompose (v -> s .flush ())
98
- .thenApply (v -> { assertTrue (basik .prePersisted && basik .postPersisted ); return s ; } )
99
- .thenApply (v -> { assertTrue (basik .parent .prePersisted && basik .parent .postPersisted ); return s ; } )
98
+ .thenCompose ( s -> s .persist ( basik )
99
+ .thenApply ( v -> {
100
+ assertTrue ( basik .prePersisted && !basik .postPersisted );
101
+ assertTrue ( basik .parent .prePersisted && !basik .parent .postPersisted );
102
+ return s ;
103
+ } )
104
+ .thenCompose ( v -> s .flush () )
105
+ .thenApply ( v -> {
106
+ assertTrue ( basik .prePersisted && basik .postPersisted );
107
+ assertTrue ( basik .parent .prePersisted && basik .parent .postPersisted );
108
+ return s ;
109
+ } )
100
110
)
101
111
.thenCompose ( v -> openSession () )
102
- .thenCompose (s2 -> s2 .find ( Node .class , basik .getId () )
112
+ .thenCompose ( s2 -> s2 .find ( Node .class , basik .getId () )
103
113
.thenCompose ( node -> {
104
114
assertNotNull ( node );
105
115
assertTrue ( node .loaded );
106
- assertEquals ( node .string , basik .string );
116
+ assertEquals ( node .string , basik .string );
107
117
assertEquals ( node .version , 0 );
108
118
assertEquals ( node .elements .size (), basik .elements .size () );
109
119
110
120
node .string = "Adopted" ;
111
- node .parent = new Node ("New Parent" );
121
+ node .parent = new Node ( "New Parent" );
112
122
return s2 .flush ()
113
- .thenAccept (v -> {
123
+ .thenAccept ( v -> {
114
124
assertNotNull ( node );
115
125
assertTrue ( node .postUpdated && node .preUpdated );
116
126
assertFalse ( node .postPersisted && node .prePersisted );
117
127
assertTrue ( node .parent .postPersisted && node .parent .prePersisted );
118
128
assertEquals ( node .version , 1 );
119
- });
120
- }) )
129
+ } );
130
+ } ) )
121
131
.thenCompose ( v -> openSession () )
122
- .thenCompose (s2 -> s2 .find ( Node .class , basik .getId () )
132
+ .thenCompose ( s2 -> s2 .find ( Node .class , basik .getId () )
123
133
.thenCompose ( node -> {
124
134
assertNotNull ( node );
125
135
assertEquals ( node .version , 1 );
126
- assertEquals ( node .string , "Adopted" );
127
- assertTrue (Hibernate .isInitialized (node .elements ) );
128
- assertFalse (Hibernate .isInitialized (node .parent ) );
136
+ assertEquals ( node .string , "Adopted" );
137
+ assertTrue ( Hibernate .isInitialized ( node .elements ) );
138
+ assertFalse ( Hibernate .isInitialized ( node .parent ) );
129
139
return s2 .fetch ( node .parent )
130
140
.thenCompose ( parent -> {
131
141
assertNotNull ( parent );
132
- return s2 .createQuery ("update Node set string = upper(string)" ).executeUpdate ()
133
- .thenCompose (v -> s2 .refresh (node ))
134
- .thenAccept (v -> {
142
+ return s2 .createMutationQuery ( "update Node set string = upper(string)" )
143
+ .executeUpdate ()
144
+ .thenCompose ( v -> s2 .refresh ( node ) )
145
+ .thenAccept ( v -> {
135
146
assertEquals ( node .getString (), "ADOPTED" );
136
147
assertEquals ( parent .getString (), "NEW PARENT" );
137
148
assertTrue ( Hibernate .isInitialized ( node .elements ) );
138
149
assertTrue ( Hibernate .isInitialized ( parent .elements ) );
139
- });
140
- });
141
- }) )
150
+ } );
151
+ } );
152
+ } ) )
142
153
.thenCompose ( v -> openSession () )
143
- .thenCompose (s3 -> s3 .find ( Node .class , basik .getId () )
154
+ .thenCompose ( s3 -> s3 .find ( Node .class , basik .getId () )
144
155
.thenCompose ( node -> {
145
156
assertFalse ( node .postUpdated && node .preUpdated );
146
157
assertFalse ( node .postPersisted && node .prePersisted );
147
158
assertEquals ( node .version , 1 );
148
- assertEquals ( node .string , "ADOPTED" );
159
+ assertEquals ( node .string , "ADOPTED" );
149
160
basik .version = node .version ;
150
161
basik .string = "Hello World!" ;
151
162
basik .parent .string = "Goodbye World!" ;
152
- return s3 .merge (basik )
163
+ return s3 .merge ( basik )
153
164
.thenAccept ( b -> {
154
- assertEquals ( b .string , "Hello World!" );
155
- assertEquals ( b .parent .string , "Goodbye World!" );
156
- })
157
- .thenCompose (v -> s3 .remove (node ) )
158
- .thenAccept (v -> assertTrue ( !node .postRemoved && node .preRemoved ) )
159
- .thenCompose (v -> s3 .flush ())
160
- .thenAccept (v -> assertTrue ( node .postRemoved && node .preRemoved ) );
161
- }) )
165
+ assertEquals ( b .string , "Hello World!" );
166
+ assertEquals ( b .parent .string , "Goodbye World!" );
167
+ } )
168
+ .thenCompose ( v -> s3 .remove ( node ) )
169
+ .thenAccept ( v -> assertTrue ( !node .postRemoved && node .preRemoved ) )
170
+ .thenCompose ( v -> s3 .flush () )
171
+ .thenAccept ( v -> assertTrue ( node .postRemoved && node .preRemoved ) );
172
+ } ) )
162
173
.thenCompose ( v -> openSession () )
163
- .thenCompose (s4 -> s4 .find ( Node .class , basik .getId () )
164
- .thenAccept ( Assertions ::assertNull ) )
174
+ .thenCompose ( s4 -> s4 .find ( Node .class , basik .getId () )
175
+ .thenAccept ( Assertions ::assertNull ) )
165
176
);
166
177
}
167
178
168
- @ Entity (name = "Element" ) @ Table (name ="Element" )
179
+ @ Entity (name = "Element" )
180
+ @ Table (name = "Element" )
169
181
public static class Element {
170
- @ Id @ GeneratedValue Integer id ;
182
+ @ Id
183
+ @ GeneratedValue
184
+ Integer id ;
171
185
172
186
@ ManyToOne
173
187
Node node ;
@@ -176,42 +190,48 @@ public Element(Node node) {
176
190
this .node = node ;
177
191
}
178
192
179
- Element () {}
193
+ Element () {
194
+ }
180
195
}
181
196
182
- @ Entity (name = "Node" ) @ Table (name ="Node" )
197
+ @ Entity (name = "Node" )
198
+ @ Table (name = "Node" )
183
199
public static class Node {
184
200
185
- @ Id @ GeneratedValue Integer id ;
186
- @ Version Integer version ;
201
+ @ Id
202
+ @ GeneratedValue
203
+ Integer id ;
204
+ @ Version
205
+ Integer version ;
187
206
String string ;
188
207
189
- @ ManyToOne (fetch = FetchType .LAZY ,
190
- cascade = {CascadeType .PERSIST ,
191
- CascadeType .REFRESH ,
192
- CascadeType .MERGE ,
193
- CascadeType .REMOVE })
208
+ @ ManyToOne (fetch = LAZY , cascade = {PERSIST , REFRESH , MERGE , REMOVE })
194
209
Node parent ;
195
210
196
- @ OneToMany (fetch = FetchType .EAGER ,
197
- cascade = {CascadeType .PERSIST ,
198
- CascadeType .REMOVE },
199
- mappedBy = "node" )
211
+ @ OneToMany (fetch = EAGER , cascade = {PERSIST , REMOVE }, mappedBy = "node" )
200
212
List <Element > elements = new ArrayList <>();
201
213
202
- @ Transient boolean prePersisted ;
203
- @ Transient boolean postPersisted ;
204
- @ Transient boolean preUpdated ;
205
- @ Transient boolean postUpdated ;
206
- @ Transient boolean postRemoved ;
207
- @ Transient boolean preRemoved ;
208
- @ Transient boolean loaded ;
214
+ @ Transient
215
+ boolean prePersisted ;
216
+ @ Transient
217
+ boolean postPersisted ;
218
+ @ Transient
219
+ boolean preUpdated ;
220
+ @ Transient
221
+ boolean postUpdated ;
222
+ @ Transient
223
+ boolean postRemoved ;
224
+ @ Transient
225
+ boolean preRemoved ;
226
+ @ Transient
227
+ boolean loaded ;
209
228
210
229
public Node (String string ) {
211
230
this .string = string ;
212
231
}
213
232
214
- Node () {}
233
+ Node () {
234
+ }
215
235
216
236
@ PrePersist
217
237
void prePersist () {
@@ -264,6 +284,22 @@ public void setString(String string) {
264
284
this .string = string ;
265
285
}
266
286
287
+ public Node getParent () {
288
+ return parent ;
289
+ }
290
+
291
+ public void setParent (Node parent ) {
292
+ this .parent = parent ;
293
+ }
294
+
295
+ public List <Element > getElements () {
296
+ return elements ;
297
+ }
298
+
299
+ public void setElements (List <Element > elements ) {
300
+ this .elements = elements ;
301
+ }
302
+
267
303
@ Override
268
304
public String toString () {
269
305
return id + ": " + string ;
@@ -278,12 +314,12 @@ public boolean equals(Object o) {
278
314
return false ;
279
315
}
280
316
Node node = (Node ) o ;
281
- return Objects .equals (string , node .string );
317
+ return Objects .equals ( string , node .string );
282
318
}
283
319
284
320
@ Override
285
321
public int hashCode () {
286
- return Objects .hash (string );
322
+ return Objects .hash ( string );
287
323
}
288
324
}
289
325
}
0 commit comments