@@ -271,11 +271,13 @@ public Statement prepareSaveOf(NodeDescription<?> nodeDescription,
271
271
.where (possibleExistingNode .isNull ()).create (rootNode )
272
272
.set (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM ))).returning (rootNode .internalId ()).build ();
273
273
274
+ // needs a dedicated variable for the union function in the CypherDSL.
275
+ Node nodeToUpdate = node (primaryLabel , additionalLabels ).named (Constants .NAME_OF_ROOT_NODE );
274
276
Statement updateIfExists = updateDecorator
275
- .apply (match (rootNode ).where (rootNode .property (nameOfIdProperty ).isEqualTo (idParameter ))
276
- .and (rootNode .property (versionProperty .getName ()).isEqualTo (parameter (Constants .NAME_OF_VERSION_PARAM )))
277
- .mutate (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM )))
278
- .returning (rootNode .internalId ()).build ();
277
+ .apply (match (nodeToUpdate ).where (nodeToUpdate .property (nameOfIdProperty ).isEqualTo (idParameter ))
278
+ .and (nodeToUpdate .property (versionProperty .getName ()).isEqualTo (parameter (Constants .NAME_OF_VERSION_PARAM )))
279
+ .mutate (nodeToUpdate , parameter (Constants .NAME_OF_PROPERTIES_PARAM )))
280
+ .returning (nodeToUpdate .internalId ()).build ();
279
281
return Cypher .union (createIfNew , updateIfExists );
280
282
281
283
} else {
@@ -289,6 +291,9 @@ public Statement prepareSaveOf(NodeDescription<?> nodeDescription,
289
291
Statement createIfNew ;
290
292
Statement updateIfExists ;
291
293
294
+ // needs a dedicated variable for the union function in the CypherDSL.
295
+ Node nodeToUpdate = node (primaryLabel , additionalLabels ).named (Constants .NAME_OF_ROOT_NODE );
296
+
292
297
if (((Neo4jPersistentEntity ) nodeDescription ).hasVersionProperty ()) {
293
298
294
299
PersistentProperty versionProperty = ((Neo4jPersistentEntity ) nodeDescription ).getRequiredVersionProperty ();
@@ -299,18 +304,18 @@ public Statement prepareSaveOf(NodeDescription<?> nodeDescription,
299
304
.set (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM )))
300
305
.returning (rootNode .internalId ()).build ();
301
306
302
- updateIfExists = updateDecorator .apply (match (rootNode ).where (rootNode .internalId ().isEqualTo (idParameter ))
303
- .and (rootNode .property (versionProperty .getName ()).isEqualTo (parameter (Constants .NAME_OF_VERSION_PARAM )))
304
- .mutate (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM ))).returning (rootNode .internalId ()).build ();
307
+ updateIfExists = updateDecorator .apply (match (nodeToUpdate ).where (nodeToUpdate .internalId ().isEqualTo (idParameter ))
308
+ .and (nodeToUpdate .property (versionProperty .getName ()).isEqualTo (parameter (Constants .NAME_OF_VERSION_PARAM )))
309
+ .mutate (nodeToUpdate , parameter (Constants .NAME_OF_PROPERTIES_PARAM ))).returning (nodeToUpdate .internalId ()).build ();
305
310
} else {
306
311
createIfNew = updateDecorator
307
312
.apply (optionalMatch (possibleExistingNode ).where (possibleExistingNode .internalId ().isEqualTo (idParameter ))
308
313
.with (possibleExistingNode ).where (possibleExistingNode .isNull ()).create (rootNode )
309
314
.set (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM )))
310
315
.returning (rootNode .internalId ()).build ();
311
316
312
- updateIfExists = updateDecorator .apply (match (rootNode ).where (rootNode .internalId ().isEqualTo (idParameter ))
313
- .mutate (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM ))).returning (rootNode .internalId ()).build ();
317
+ updateIfExists = updateDecorator .apply (match (nodeToUpdate ).where (nodeToUpdate .internalId ().isEqualTo (idParameter ))
318
+ .mutate (nodeToUpdate , parameter (Constants .NAME_OF_PROPERTIES_PARAM ))).returning (nodeToUpdate .internalId ()).build ();
314
319
}
315
320
316
321
return Cypher .union (createIfNew , updateIfExists );
0 commit comments