@@ -527,27 +527,29 @@ public Statement prepareUpdateOfRelationshipsWithProperties(Neo4jPersistentEntit
527
527
String row = "row" ;
528
528
Property relationshipProperties = Cypher .property (row , Constants .NAME_OF_PROPERTIES_PARAM );
529
529
Property idProperty = Cypher .property (row , Constants .FROM_ID_PARAMETER_NAME );
530
- StatementBuilder .OngoingReadingWithWhere matchStartAndEndNode =
531
- Cypher .unwind (parameter (Constants .NAME_OF_RELATIONSHIP_LIST_PARAM )).as (row )
532
- .with (row )
533
- .match (startNode )
534
- .where (neo4jPersistentEntity .isUsingInternalIds () ? internalId (startNode ).isEqualTo (idProperty )
535
- : startNode .property (idPropertyName ).isEqualTo (idProperty ))
536
- .match (endNode ).where (internalId (endNode ).isEqualTo (Cypher .property (row , Constants .TO_ID_PARAMETER_NAME )));
537
-
538
- StatementBuilder .ExposesSet createOrUpdateRelationship = isNew
539
- ? matchStartAndEndNode .create (relationshipFragment )
540
- : matchStartAndEndNode .match (relationshipFragment )
541
- .where (Functions .id (relationshipFragment ).isEqualTo (Cypher .property (row , Constants .NAME_OF_KNOWN_RELATIONSHIP_PARAM )));
530
+ StatementBuilder .OrderableOngoingReadingAndWithWithoutWhere cypherUnwind = Cypher .unwind (parameter (Constants .NAME_OF_RELATIONSHIP_LIST_PARAM ))
531
+ .as (row )
532
+ .with (row );
542
533
534
+ // we only need start and end node querying if we have to create a new relationship...
543
535
if (isNew ) {
544
- return createOrUpdateRelationship .mutate (RELATIONSHIP_NAME , relationshipProperties ).returning (
545
- Functions .id (relationshipFragment ).as (Constants .NAME_OF_INTERNAL_ID ),
546
- Functions .elementId (relationshipFragment ).as (Constants .NAME_OF_ELEMENT_ID )
547
- ).build ();
536
+ return cypherUnwind
537
+ .match (startNode )
538
+ .where (neo4jPersistentEntity .isUsingInternalIds () ? internalId (startNode ).isEqualTo (idProperty )
539
+ : startNode .property (idPropertyName ).isEqualTo (idProperty ))
540
+ .match (endNode ).where (internalId (endNode ).isEqualTo (Cypher .property (row , Constants .TO_ID_PARAMETER_NAME )))
541
+ .create (relationshipFragment )
542
+ .mutate (RELATIONSHIP_NAME , relationshipProperties ).returning (
543
+ Functions .id (relationshipFragment ).as (Constants .NAME_OF_INTERNAL_ID ),
544
+ Functions .elementId (relationshipFragment ).as (Constants .NAME_OF_ELEMENT_ID )
545
+ ).build ();
546
+
548
547
}
549
548
550
- return createOrUpdateRelationship .mutate (RELATIONSHIP_NAME , relationshipProperties ).build ();
549
+ // ... otherwise we can just fetch the existing relationship by known id
550
+ return cypherUnwind .match (relationshipFragment )
551
+ .where (Functions .id (relationshipFragment ).isEqualTo (Cypher .property (row , Constants .NAME_OF_KNOWN_RELATIONSHIP_PARAM )))
552
+ .mutate (RELATIONSHIP_NAME , relationshipProperties ).build ();
551
553
}
552
554
553
555
@ NonNull
0 commit comments