58
58
* @author Mark Paluch
59
59
* @author Myeonghyeon Lee
60
60
* @author Myat Min
61
+ * @author Radim Tlusty
61
62
*/
62
63
public class DefaultDataAccessStrategyUnitTests {
63
64
64
65
public static final long ID_FROM_ADDITIONAL_VALUES = 23L ;
65
66
public static final long ORIGINAL_ID = 4711L ;
67
+ public static final long GENERATED_ID = 17 ;
66
68
67
69
NamedParameterJdbcOperations namedJdbcOperations = mock (NamedParameterJdbcOperations .class );
68
70
JdbcOperations jdbcOperations = mock (JdbcOperations .class );
@@ -99,7 +101,7 @@ public void additionalParameterForIdDoesNotLeadToDuplicateParameters() {
99
101
accessStrategy .insert (new DummyEntity (ORIGINAL_ID ), DummyEntity .class , Identifier .from (additionalParameters ));
100
102
101
103
verify (namedJdbcOperations ).update (eq ("INSERT INTO \" DUMMY_ENTITY\" (\" ID\" ) VALUES (:ID)" ),
102
- paramSourceCaptor .capture (), any ( KeyHolder . class ) );
104
+ paramSourceCaptor .capture ());
103
105
}
104
106
105
107
@ Test // DATAJDBC-146
@@ -111,7 +113,7 @@ public void additionalParametersGetAddedToStatement() {
111
113
112
114
accessStrategy .insert (new DummyEntity (ORIGINAL_ID ), DummyEntity .class , Identifier .from (additionalParameters ));
113
115
114
- verify (namedJdbcOperations ).update (sqlCaptor .capture (), paramSourceCaptor .capture (), any ( KeyHolder . class ) );
116
+ verify (namedJdbcOperations ).update (sqlCaptor .capture (), paramSourceCaptor .capture ());
115
117
116
118
assertThat (sqlCaptor .getValue ()) //
117
119
.containsSubsequence ("INSERT INTO \" DUMMY_ENTITY\" (" , "\" ID\" " , ") VALUES (" , ":id" , ")" ) //
@@ -131,7 +133,7 @@ public void considersConfiguredWriteConverter() {
131
133
132
134
accessStrategy .insert (entity , EntityWithBoolean .class , Identifier .empty ());
133
135
134
- verify (namedJdbcOperations ).update (sqlCaptor .capture (), paramSourceCaptor .capture (), any ( KeyHolder . class ) );
136
+ verify (namedJdbcOperations ).update (sqlCaptor .capture (), paramSourceCaptor .capture ());
135
137
136
138
assertThat (paramSourceCaptor .getValue ().getValue ("id" )).isEqualTo (ORIGINAL_ID );
137
139
assertThat (paramSourceCaptor .getValue ().getValue ("flag" )).isEqualTo ("T" );
@@ -150,7 +152,7 @@ public void considersConfiguredWriteConverterForIdValueObjects() {
150
152
151
153
accessStrategy .insert (entity , WithValueObjectId .class , Identifier .empty ());
152
154
153
- verify (namedJdbcOperations ).update (anyString (), paramSourceCaptor .capture (), any ( KeyHolder . class ) );
155
+ verify (namedJdbcOperations ).update (anyString (), paramSourceCaptor .capture ());
154
156
155
157
assertThat (paramSourceCaptor .getValue ().getValue ("id" )).isEqualTo (rawId );
156
158
assertThat (paramSourceCaptor .getValue ().getValue ("value" )).isEqualTo ("vs. superman" );
@@ -177,7 +179,7 @@ public void considersConfiguredWriteConverterForIdValueObjectsWhichReferencedInO
177
179
additionalParameters .put (SqlIdentifier .quoted ("DUMMYENTITYROOT" ), rootIdValue );
178
180
accessStrategy .insert (root , DummyEntityRoot .class , Identifier .from (additionalParameters ));
179
181
180
- verify (namedJdbcOperations ).update (anyString (), paramSourceCaptor .capture (), any ( KeyHolder . class ) );
182
+ verify (namedJdbcOperations ).update (anyString (), paramSourceCaptor .capture ());
181
183
182
184
assertThat (paramSourceCaptor .getValue ().getValue ("id" )).isEqualTo (rawId );
183
185
@@ -191,6 +193,36 @@ public void considersConfiguredWriteConverterForIdValueObjectsWhichReferencedInO
191
193
assertThat (paramSourceCaptor .getValue ().getValue ("DUMMYENTITYROOT" )).isEqualTo (rawId );
192
194
}
193
195
196
+ @ Test // gh-933
197
+ public void insertWithDefinedIdDoesNotRetrieveGeneratedKeys () {
198
+
199
+ Object generatedId = accessStrategy .insert (new DummyEntity (ORIGINAL_ID ), DummyEntity .class , Identifier .from (additionalParameters ));
200
+
201
+ assertThat (generatedId ).isNull ();
202
+
203
+ verify (namedJdbcOperations ).update (eq ("INSERT INTO \" DUMMY_ENTITY\" (\" ID\" ) VALUES (:id)" ),
204
+ paramSourceCaptor .capture ());
205
+ }
206
+
207
+ @ Test // gh-933
208
+ public void insertWithUndefinedIdRetrievesGeneratedKeys () {
209
+
210
+ when (namedJdbcOperations .update (any (), any (), any ()))
211
+ .then (invocation -> {
212
+
213
+ KeyHolder keyHolder = invocation .getArgument (2 );
214
+ keyHolder .getKeyList ().add (singletonMap ("ID" , GENERATED_ID ));
215
+ return 1 ;
216
+ });
217
+
218
+ Object generatedId = accessStrategy .insert (new DummyEntity (null ), DummyEntity .class , Identifier .from (additionalParameters ));
219
+
220
+ assertThat (generatedId ).isEqualTo (GENERATED_ID );
221
+
222
+ verify (namedJdbcOperations ).update (eq ("INSERT INTO \" DUMMY_ENTITY\" VALUES ()" ),
223
+ paramSourceCaptor .capture (), any (KeyHolder .class ));
224
+ }
225
+
194
226
private DefaultDataAccessStrategy createAccessStrategyWithConverter (List <?> converters ) {
195
227
DelegatingDataAccessStrategy relationResolver = new DelegatingDataAccessStrategy ();
196
228
0 commit comments