@@ -401,7 +401,7 @@ private <T> T saveImpl(T instance, @Nullable Collection<PropertyFilter.Projected
401
401
neo4jMappingContext .getRequiredBinderFunctionFor ((Class <T >) entityToBeSaved .getClass ())
402
402
);
403
403
Optional <Entity > newOrUpdatedNode = neo4jClient
404
- .query (() -> renderer .render (cypherGenerator .prepareSaveOf (entityMetaData , dynamicLabels )))
404
+ .query (() -> renderer .render (cypherGenerator .prepareSaveOf (entityMetaData , dynamicLabels , TemplateSupport . rendererRendersElementId ( renderer ) )))
405
405
.bind (entityToBeSaved )
406
406
.with (binderFunction )
407
407
.fetchAs (Entity .class )
@@ -416,7 +416,7 @@ private <T> T saveImpl(T instance, @Nullable Collection<PropertyFilter.Projected
416
416
}
417
417
418
418
Object elementId = newOrUpdatedNode .map (node -> {
419
- if (!entityMetaData .isUsingDeprecatedInternalId () && entityMetaData . isUsingInternalIds ( )) {
419
+ if (!entityMetaData .isUsingDeprecatedInternalId () && TemplateSupport . rendererRendersElementId ( renderer )) {
420
420
return IdentitySupport .getElementId (node );
421
421
}
422
422
return node .id ();
@@ -764,6 +764,7 @@ private <T> T processNestedRelations(
764
764
// Remove all relationships before creating all new if the entity is not new and the relationship
765
765
// has not been processed before.
766
766
// This avoids the usage of cache but might have significant impact on overall performance
767
+ boolean canUseElementId = TemplateSupport .rendererRendersElementId (renderer );
767
768
if (!isParentObjectNew && !stateMachine .hasProcessedRelationship (fromId , relationshipDescription )) {
768
769
769
770
List <Object > knownRelationshipsIds = new ArrayList <>();
@@ -780,7 +781,7 @@ private <T> T processNestedRelations(
780
781
}
781
782
}
782
783
783
- Statement relationshipRemoveQuery = cypherGenerator .prepareDeleteOf (sourceEntity , relationshipDescription );
784
+ Statement relationshipRemoveQuery = cypherGenerator .prepareDeleteOf (sourceEntity , relationshipDescription , canUseElementId );
784
785
785
786
neo4jClient .query (renderer .render (relationshipRemoveQuery ))
786
787
.bind (convertIdValues (sourceEntity .getIdProperty (), fromId )) //
@@ -858,7 +859,7 @@ private <T> T processNestedRelations(
858
859
// create new dynamic relationship properties
859
860
if (relationshipDescription .hasRelationshipProperties () && isNewRelationship && idProperty != null ) {
860
861
CreateRelationshipStatementHolder statementHolder = neo4jMappingContext .createStatementForSingleRelationship (
861
- sourceEntity , relationshipDescription , relatedValueToStore , true );
862
+ sourceEntity , relationshipDescription , relatedValueToStore , true , canUseElementId );
862
863
863
864
List <Object > row = Collections .singletonList (properties );
864
865
statementHolder = statementHolder .addProperty (Constants .NAME_OF_RELATIONSHIP_LIST_PARAM , row );
@@ -879,7 +880,7 @@ private <T> T processNestedRelations(
879
880
} else { // plain (new or to update) dynamic relationship or dynamic relationships with properties to update
880
881
881
882
CreateRelationshipStatementHolder statementHolder = neo4jMappingContext .createStatementForSingleRelationship (
882
- sourceEntity , relationshipDescription , relatedValueToStore , false );
883
+ sourceEntity , relationshipDescription , relatedValueToStore , false , canUseElementId );
883
884
884
885
List <Object > row = Collections .singletonList (properties );
885
886
statementHolder = statementHolder .addProperty (Constants .NAME_OF_RELATIONSHIP_LIST_PARAM , row );
@@ -921,15 +922,15 @@ private <T> T processNestedRelations(
921
922
// batch operations
922
923
if (!(relationshipDescription .hasRelationshipProperties () || relationshipDescription .isDynamic () || plainRelationshipRows .isEmpty ())) {
923
924
CreateRelationshipStatementHolder statementHolder = neo4jMappingContext .createStatementForImperativeSimpleRelationshipBatch (
924
- sourceEntity , relationshipDescription , plainRelationshipRows );
925
+ sourceEntity , relationshipDescription , plainRelationshipRows , canUseElementId );
925
926
statementHolder = statementHolder .addProperty (Constants .NAME_OF_RELATIONSHIP_LIST_PARAM , plainRelationshipRows );
926
927
neo4jClient .query (renderer .render (statementHolder .getStatement ()))
927
928
.bindAll (statementHolder .getProperties ())
928
929
.run ();
929
930
} else if (relationshipDescription .hasRelationshipProperties ()) {
930
931
if (!relationshipPropertiesRows .isEmpty ()) {
931
932
CreateRelationshipStatementHolder statementHolder = neo4jMappingContext .createStatementForImperativeRelationshipsWithPropertiesBatch (false ,
932
- sourceEntity , relationshipDescription , updateRelatedValuesToStore , relationshipPropertiesRows );
933
+ sourceEntity , relationshipDescription , updateRelatedValuesToStore , relationshipPropertiesRows , canUseElementId );
933
934
statementHolder = statementHolder .addProperty (Constants .NAME_OF_RELATIONSHIP_LIST_PARAM , relationshipPropertiesRows );
934
935
935
936
neo4jClient .query (renderer .render (statementHolder .getStatement ()))
@@ -938,7 +939,7 @@ private <T> T processNestedRelations(
938
939
}
939
940
if (!newRelatedValuesToStore .isEmpty ()) {
940
941
CreateRelationshipStatementHolder statementHolder = neo4jMappingContext .createStatementForImperativeRelationshipsWithPropertiesBatch (true ,
941
- sourceEntity , relationshipDescription , newRelatedValuesToStore , newRelationshipPropertiesRows );
942
+ sourceEntity , relationshipDescription , newRelatedValuesToStore , newRelationshipPropertiesRows , canUseElementId );
942
943
List <Object > all = new ArrayList <>(neo4jClient .query (renderer .render (statementHolder .getStatement ()))
943
944
.bindAll (statementHolder .getProperties ())
944
945
.fetchAs (Object .class )
@@ -996,7 +997,7 @@ private Entity saveRelatedNode(Object entity, NodeDescription<?> targetNodeDescr
996
997
return tree ;
997
998
});
998
999
Optional <Entity > optionalSavedNode = neo4jClient
999
- .query (() -> renderer .render (cypherGenerator .prepareSaveOf (targetNodeDescription , dynamicLabels )))
1000
+ .query (() -> renderer .render (cypherGenerator .prepareSaveOf (targetNodeDescription , dynamicLabels , TemplateSupport . rendererRendersElementId ( renderer ) )))
1000
1001
.bind (entity ).with (binderFunction )
1001
1002
.fetchAs (Entity .class )
1002
1003
.one ();
0 commit comments