21
21
import org .mockito .Mock ;
22
22
import org .mockito .junit .MockitoJUnitRunner ;
23
23
import org .springframework .core .annotation .AliasFor ;
24
+ import org .springframework .data .jpa .domain .sample .Dummy ;
24
25
import org .springframework .data .jpa .domain .sample .User ;
25
26
import org .springframework .data .repository .query .Param ;
26
27
import org .springframework .util .ReflectionUtils ;
27
28
28
29
import javax .persistence .EntityManager ;
30
+ import javax .persistence .ParameterMode ;
29
31
import java .lang .annotation .Retention ;
30
32
import java .lang .annotation .RetentionPolicy ;
31
33
import java .lang .reflect .Method ;
34
+ import java .util .List ;
32
35
import java .util .Map ;
33
36
34
37
import static org .assertj .core .api .Assertions .*;
43
46
* @author Diego Diez
44
47
* @author Jeff Sheets
45
48
* @author Jens Schauder
49
+ * @author Gabriel Basilio
46
50
* @since 1.6
47
51
*/
48
52
@ RunWith (MockitoJUnitRunner .class )
@@ -65,10 +69,11 @@ public void setup() {
65
69
public void shouldCreateStoredProcedureAttributesFromProcedureMethodWithImplicitProcedureName () {
66
70
67
71
StoredProcedureAttributes attr = creator .createFrom (method ("plus1inout" , Integer .class ), entityMetadata );
68
-
72
+ ProcedureParameter outputParameter = attr . getOutputProcedureParameters (). get ( 0 );
69
73
assertThat (attr .getProcedureName ()).isEqualTo ("plus1inout" );
70
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
71
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
74
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
75
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
76
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
72
77
}
73
78
74
79
@ Test // DATAJPA-455
@@ -77,9 +82,11 @@ public void shouldCreateStoredProcedureAttributesFromProcedureMethodWithExplictN
77
82
StoredProcedureAttributes attr = creator .createFrom (method ("explicitlyNamedPlus1inout" , Integer .class ),
78
83
entityMetadata );
79
84
85
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
80
86
assertThat (attr .getProcedureName ()).isEqualTo ("plus1inout" );
81
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
82
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
87
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
88
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
89
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
83
90
}
84
91
85
92
@ Test // DATAJPA-455
@@ -88,9 +95,11 @@ public void shouldCreateStoredProcedureAttributesFromProcedureMethodWithExplictP
88
95
StoredProcedureAttributes attr = creator .createFrom (method ("explicitlyNamedPlus1inout" , Integer .class ),
89
96
entityMetadata );
90
97
98
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
91
99
assertThat (attr .getProcedureName ()).isEqualTo ("plus1inout" );
92
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
93
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
100
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
101
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
102
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
94
103
}
95
104
96
105
@ Test // DATAJPA-455
@@ -99,9 +108,11 @@ public void shouldCreateStoredProcedureAttributesFromProcedureMethodWithExplictP
99
108
StoredProcedureAttributes attr = creator
100
109
.createFrom (method ("explicitPlus1inoutViaProcedureNameAlias" , Integer .class ), entityMetadata );
101
110
111
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
102
112
assertThat (attr .getProcedureName ()).isEqualTo ("plus1inout" );
103
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
104
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
113
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
114
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
115
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
105
116
}
106
117
107
118
@ Test // DATAJPA-1297
@@ -110,9 +121,11 @@ public void shouldCreateStoredProcedureAttributesFromProcedureMethodWithExplictP
110
121
StoredProcedureAttributes attr = creator .createFrom (
111
122
method ("explicitPlus1inoutViaProcedureNameAliasAndOutputParameterName" , Integer .class ), entityMetadata );
112
123
124
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
113
125
assertThat (attr .getProcedureName ()).isEqualTo ("plus1inout" );
114
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
115
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo ("res" );
126
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
127
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
128
+ assertThat (outputParameter .getName ()).isEqualTo ("res" );
116
129
}
117
130
118
131
@ Test // DATAJPA-455
@@ -121,9 +134,11 @@ public void shouldCreateStoredProcedureAttributesFromProcedureMethodBackedWithEx
121
134
StoredProcedureAttributes attr = creator
122
135
.createFrom (method ("entityAnnotatedCustomNamedProcedurePlus1IO" , Integer .class ), entityMetadata );
123
136
137
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
124
138
assertThat (attr .getProcedureName ()).isEqualTo ("User.plus1IO" );
125
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
126
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo ("res" );
139
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
140
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
141
+ assertThat (outputParameter .getName ()).isEqualTo ("res" );
127
142
}
128
143
129
144
@ Test // DATAJPA-707
@@ -132,9 +147,11 @@ public void shouldCreateStoredProcedureAttributesFromProcedureMethodBackedWithEx
132
147
StoredProcedureAttributes attr = creator
133
148
.createFrom (method ("entityAnnotatedCustomNamedProcedureOutputParamNamePlus1IO" , Integer .class ), entityMetadata );
134
149
150
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
135
151
assertThat (attr .getProcedureName ()).isEqualTo ("User.plus1IO" );
136
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
137
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo ("override" );
152
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
153
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
154
+ assertThat (outputParameter .getName ()).isEqualTo ("override" );
138
155
}
139
156
140
157
@ Test // DATAJPA-707
@@ -143,21 +160,30 @@ public void shouldCreateStoredProcedureAttributesFromProcedureMethodBackedWithEx
143
160
StoredProcedureAttributes attr = creator
144
161
.createFrom (method ("entityAnnotatedCustomNamedProcedurePlus1IO2" , Integer .class ), entityMetadata );
145
162
163
+ ProcedureParameter firstOutputParameter = attr .getOutputProcedureParameters ().get (0 );
164
+ ProcedureParameter secondOutputParameter = attr .getOutputProcedureParameters ().get (1 );
165
+
146
166
assertThat (attr .getProcedureName ()).isEqualTo ("User.plus1IO2" );
147
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
148
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo ("res" );
149
- assertThat (attr .getOutputParameterTypes ().get (1 )).isEqualTo (Integer .class );
150
- assertThat (attr .getOutputParameterNames ().get (1 )).isEqualTo ("res2" );
167
+
168
+ assertThat (firstOutputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
169
+ assertThat (firstOutputParameter .getType ()).isEqualTo (Integer .class );
170
+ assertThat (firstOutputParameter .getName ()).isEqualTo ("res" );
171
+
172
+ assertThat (secondOutputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
173
+ assertThat (secondOutputParameter .getType ()).isEqualTo (Integer .class );
174
+ assertThat (secondOutputParameter .getName ()).isEqualTo ("res2" );
151
175
}
152
176
153
177
@ Test // DATAJPA-455
154
178
public void shouldCreateStoredProcedureAttributesFromProcedureMethodBackedWithImplicitlyNamedProcedure () {
155
179
156
180
StoredProcedureAttributes attr = creator .createFrom (method ("plus1" , Integer .class ), entityMetadata );
157
181
182
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
158
183
assertThat (attr .getProcedureName ()).isEqualTo ("User.plus1" );
159
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
160
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo ("res" );
184
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
185
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
186
+ assertThat (outputParameter .getName ()).isEqualTo ("res" );
161
187
}
162
188
163
189
@ Test // DATAJPA-871
@@ -166,9 +192,11 @@ public void aliasedStoredProcedure() {
166
192
StoredProcedureAttributes attr = creator
167
193
.createFrom (method ("plus1inoutWithComposedAnnotationOverridingProcedureName" , Integer .class ), entityMetadata );
168
194
195
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
169
196
assertThat (attr .getProcedureName ()).isEqualTo ("plus1inout" );
170
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
171
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
197
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
198
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
199
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
172
200
}
173
201
174
202
@ Test // DATAJPA-871
@@ -177,9 +205,104 @@ public void aliasedStoredProcedure2() {
177
205
StoredProcedureAttributes attr = creator
178
206
.createFrom (method ("plus1inoutWithComposedAnnotationOverridingName" , Integer .class ), entityMetadata );
179
207
208
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
180
209
assertThat (attr .getProcedureName ()).isEqualTo ("User.plus1" );
181
- assertThat (attr .getOutputParameterTypes ().get (0 )).isEqualTo (Integer .class );
182
- assertThat (attr .getOutputParameterNames ().get (0 )).isEqualTo ("res" );
210
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
211
+ assertThat (outputParameter .getType ()).isEqualTo (Integer .class );
212
+ assertThat (outputParameter .getName ()).isEqualTo ("res" );
213
+ }
214
+
215
+ @ Test // DATAJPA-1657
216
+ public void testSingleEntityFrom1RowResultSetAndNoInput () {
217
+
218
+ StoredProcedureAttributes attr = creator
219
+ .createFrom (method ("singleEntityFrom1RowResultSetAndNoInput" ), entityMetadata );
220
+
221
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
222
+ assertThat (attr .getProcedureName ()).isEqualTo ("0_input_1_row_resultset" );
223
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
224
+ assertThat (outputParameter .getType ()).isEqualTo (Dummy .class );
225
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
226
+ }
227
+
228
+ @ Test // DATAJPA-1657
229
+ public void testSingleEntityFrom1RowResultSetWithInput () {
230
+
231
+ StoredProcedureAttributes attr = creator
232
+ .createFrom (method ("singleEntityFrom1RowResultSetWithInput" , Integer .class ), entityMetadata );
233
+
234
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
235
+ assertThat (attr .getProcedureName ()).isEqualTo ("1_input_1_row_resultset" );
236
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
237
+ assertThat (outputParameter .getType ()).isEqualTo (Dummy .class );
238
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
239
+ }
240
+
241
+
242
+ @ Test // DATAJPA-1657
243
+ public void testEntityListFromResultSetWithNoInput () {
244
+
245
+ StoredProcedureAttributes attr = creator
246
+ .createFrom (method ("entityListFromResultSetWithNoInput" ), entityMetadata );
247
+
248
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
249
+ assertThat (attr .getProcedureName ()).isEqualTo ("0_input_1_resultset" );
250
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
251
+ assertThat (outputParameter .getType ()).isEqualTo (List .class );
252
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
253
+ }
254
+
255
+ //
256
+ @ Test // DATAJPA-1657
257
+ public void testEntityListFromResultSetWithInput () {
258
+
259
+ StoredProcedureAttributes attr = creator
260
+ .createFrom (method ("entityListFromResultSetWithInput" , Integer .class ), entityMetadata );
261
+
262
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
263
+ assertThat (attr .getProcedureName ()).isEqualTo ("1_input_1_resultset" );
264
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
265
+ assertThat (outputParameter .getType ()).isEqualTo (List .class );
266
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
267
+ }
268
+
269
+ @ Test // DATAJPA-1657
270
+ public void testGenericObjectListFromResultSetWithInput () {
271
+
272
+ StoredProcedureAttributes attr = creator
273
+ .createFrom (method ("genericObjectListFromResultSetWithInput" , Integer .class ), entityMetadata );
274
+
275
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
276
+ assertThat (attr .getProcedureName ()).isEqualTo ("1_input_1_resultset" );
277
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
278
+ assertThat (outputParameter .getType ()).isEqualTo (List .class );
279
+ assertThat (outputParameter .getName ()).isEqualTo (StoredProcedureAttributes .SYNTHETIC_OUTPUT_PARAMETER_NAME );
280
+ }
281
+
282
+ @ Test // DATAJPA-1657
283
+ public void testEntityListFromResultSetWithInputAndNamedOutput () {
284
+
285
+ StoredProcedureAttributes attr = creator
286
+ .createFrom (method ("entityListFromResultSetWithInputAndNamedOutput" , Integer .class ), entityMetadata );
287
+
288
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
289
+ assertThat (attr .getProcedureName ()).isEqualTo ("1_input_1_resultset" );
290
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .OUT );
291
+ assertThat (outputParameter .getType ()).isEqualTo (List .class );
292
+ assertThat (outputParameter .getName ()).isEqualTo ("dummies" );
293
+ }
294
+
295
+ @ Test // DATAJPA-1657
296
+ public void testEntityListFromResultSetWithInputAndNamedOutputAndCursor () {
297
+
298
+ StoredProcedureAttributes attr = creator
299
+ .createFrom (method ("entityListFromResultSetWithInputAndNamedOutputAndCursor" , Integer .class ), entityMetadata );
300
+
301
+ ProcedureParameter outputParameter = attr .getOutputProcedureParameters ().get (0 );
302
+ assertThat (attr .getProcedureName ()).isEqualTo ("1_input_1_resultset" );
303
+ assertThat (outputParameter .getMode ()).isEqualTo (ParameterMode .REF_CURSOR );
304
+ assertThat (outputParameter .getType ()).isEqualTo (List .class );
305
+ assertThat (outputParameter .getName ()).isEqualTo ("dummies" );
183
306
}
184
307
185
308
private static Method method (String name , Class <?>... paramTypes ) {
@@ -255,6 +378,34 @@ interface DummyRepository {
255
378
256
379
@ ComposedProcedureUsingAliasFor (emProcedureName = "User.plus1" )
257
380
Integer plus1inoutWithComposedAnnotationOverridingName (Integer arg );
381
+
382
+ @ Procedure ("0_input_1_row_resultset" )
383
+ // DATAJPA-1657
384
+ Dummy singleEntityFrom1RowResultSetAndNoInput ();
385
+
386
+ @ Procedure ("1_input_1_row_resultset" )
387
+ // DATAJPA-1657
388
+ Dummy singleEntityFrom1RowResultSetWithInput (Integer arg );
389
+
390
+ @ Procedure ("0_input_1_resultset" )
391
+ // DATAJPA-1657
392
+ List <Dummy > entityListFromResultSetWithNoInput ();
393
+
394
+ @ Procedure ("1_input_1_resultset" )
395
+ // DATAJPA-1657
396
+ List <Dummy > entityListFromResultSetWithInput (Integer arg );
397
+
398
+ @ Procedure ("1_input_1_resultset" )
399
+ // DATAJPA-1657
400
+ List <Object []> genericObjectListFromResultSetWithInput (Integer arg );
401
+
402
+ @ Procedure (value = "1_input_1_resultset" , outputParameterName = "dummies" )
403
+ // DATAJPA-1657
404
+ List <Dummy > entityListFromResultSetWithInputAndNamedOutput (Integer arg );
405
+
406
+ @ Procedure (value = "1_input_1_resultset" , outputParameterName = "dummies" , refCursor = true )
407
+ // DATAJPA-1657
408
+ List <Dummy > entityListFromResultSetWithInputAndNamedOutputAndCursor (Integer arg );
258
409
}
259
410
260
411
@ SuppressWarnings ("unused" )
0 commit comments