@@ -271,11 +271,13 @@ public Statement prepareSaveOf(NodeDescription<?> nodeDescription,
271271 .where (possibleExistingNode .isNull ()).create (rootNode )
272272 .set (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM ))).returning (rootNode .internalId ()).build ();
273273
274+ // needs a dedicated variable for the union function in the CypherDSL.
275+ Node nodeToUpdate = node (primaryLabel , additionalLabels ).named (Constants .NAME_OF_ROOT_NODE );
274276 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 ();
279281 return Cypher .union (createIfNew , updateIfExists );
280282
281283 } else {
@@ -289,6 +291,9 @@ public Statement prepareSaveOf(NodeDescription<?> nodeDescription,
289291 Statement createIfNew ;
290292 Statement updateIfExists ;
291293
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+
292297 if (((Neo4jPersistentEntity ) nodeDescription ).hasVersionProperty ()) {
293298
294299 PersistentProperty versionProperty = ((Neo4jPersistentEntity ) nodeDescription ).getRequiredVersionProperty ();
@@ -299,18 +304,18 @@ public Statement prepareSaveOf(NodeDescription<?> nodeDescription,
299304 .set (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM )))
300305 .returning (rootNode .internalId ()).build ();
301306
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 ();
305310 } else {
306311 createIfNew = updateDecorator
307312 .apply (optionalMatch (possibleExistingNode ).where (possibleExistingNode .internalId ().isEqualTo (idParameter ))
308313 .with (possibleExistingNode ).where (possibleExistingNode .isNull ()).create (rootNode )
309314 .set (rootNode , parameter (Constants .NAME_OF_PROPERTIES_PARAM )))
310315 .returning (rootNode .internalId ()).build ();
311316
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 ();
314319 }
315320
316321 return Cypher .union (createIfNew , updateIfExists );
0 commit comments