Skip to content

Commit 2871319

Browse files
committed
GH-2600 - WIP
1 parent 3e91eeb commit 2871319

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

src/main/java/org/springframework/data/neo4j/core/mapping/DefaultNeo4jEntityConverter.java

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ private AssociationHandler<Neo4jPersistentProperty> populateFrom(MapAccessor que
539539
&& propertyValueNotNull;
540540

541541
if (populatedCollection) {
542-
createInstanceOfRelationships(persistentProperty, queryResult, (RelationshipDescription) association, baseDescription, relationshipsFromResult, nodesFromResult)
542+
createInstanceOfRelationships(persistentProperty, queryResult, (RelationshipDescription) association, baseDescription, relationshipsFromResult, nodesFromResult, false)
543543
.ifPresent(value -> {
544544
Collection<?> providedCollection = (Collection<?>) value;
545545
Collection<?> existingValue = (Collection<?>) propertyValue;
@@ -586,9 +586,15 @@ private AssociationHandler<Neo4jPersistentProperty> populateFrom(MapAccessor que
586586
};
587587
}
588588

589+
private Optional<Object> createInstanceOfRelationships(Neo4jPersistentProperty persistentProperty, MapAccessor values,
590+
RelationshipDescription relationshipDescription, NodeDescription<?> baseDescription, Collection<Relationship> relationshipsFromResult,
591+
Collection<Node> nodesFromResult) {
592+
return createInstanceOfRelationships(persistentProperty, values, relationshipDescription, baseDescription, relationshipsFromResult, nodesFromResult, true);
593+
}
594+
589595
private Optional<Object> createInstanceOfRelationships(Neo4jPersistentProperty persistentProperty, MapAccessor values,
590596
RelationshipDescription relationshipDescription, NodeDescription<?> baseDescription, Collection<Relationship> relationshipsFromResult,
591-
Collection<Node> nodesFromResult) {
597+
Collection<Node> nodesFromResult, boolean fetchMore) {
592598

593599
String typeOfRelationship = relationshipDescription.getType();
594600
String targetLabel = relationshipDescription.getTarget().getPrimaryLabel();
@@ -663,14 +669,16 @@ private Optional<Object> createInstanceOfRelationships(Neo4jPersistentProperty p
663669
// the property population of _this_ object.
664670
// The initial population will happen at the end of this mapping. This is sufficient because
665671
// it only affects properties not changing the instance of the object.
666-
Object mappedObject = sourceNodeId != null && sourceNodeId.equals(targetNodeId)
667-
? knownObjects.getObject(sourceNodeId)
668-
: map(possibleValueNode, concreteTargetNodeDescription, null, relationshipsFromResult, nodesFromResult);
672+
Object mappedObject = fetchMore
673+
? sourceNodeId != null && sourceNodeId.equals(targetNodeId)
674+
? knownObjects.getObject(sourceNodeId)
675+
: map(possibleValueNode, concreteTargetNodeDescription, null, relationshipsFromResult, nodesFromResult)
676+
: knownObjects.getObject(targetNodeId);
669677
if (relationshipDescription.hasRelationshipProperties()) {
670678

671-
Object relationshipProperties = map(possibleRelationship,
672-
(Neo4jPersistentEntity<?>) relationshipDescription.getRelationshipPropertiesEntity(),
673-
mappedObject, relationshipsFromResult, nodesFromResult);
679+
Object relationshipProperties = fetchMore
680+
? map(possibleRelationship, (Neo4jPersistentEntity<?>) relationshipDescription.getRelationshipPropertiesEntity(), mappedObject, relationshipsFromResult, nodesFromResult)
681+
: knownObjects.getObject(getInternalId(possibleRelationship));
674682
relationshipsAndProperties.add(relationshipProperties);
675683
mappedObjectHandler.accept(possibleRelationship.type(), relationshipProperties);
676684
} else {
@@ -687,7 +695,9 @@ private Optional<Object> createInstanceOfRelationships(Neo4jPersistentProperty p
687695
Neo4jPersistentEntity<?> concreteTargetNodeDescription =
688696
getMostConcreteTargetNodeDescription(genericTargetNodeDescription, relatedEntity);
689697

690-
Object valueEntry = map(relatedEntity, concreteTargetNodeDescription, null, relationshipsFromResult, nodesFromResult);
698+
Object valueEntry = fetchMore
699+
? map(relatedEntity, concreteTargetNodeDescription, null, relationshipsFromResult, nodesFromResult)
700+
: knownObjects.getObject(getInternalId(relatedEntity));
691701

692702
if (relationshipDescription.hasRelationshipProperties()) {
693703
String sourceLabel = relationshipDescription.getSource().getMostAbstractParentLabel(baseDescription);
@@ -696,9 +706,10 @@ private Optional<Object> createInstanceOfRelationships(Neo4jPersistentProperty p
696706
Relationship relatedEntityRelationship = relatedEntity.get(relationshipSymbolicName)
697707
.asRelationship();
698708

699-
Object relationshipProperties = map(relatedEntityRelationship,
700-
(Neo4jPersistentEntity<?>) relationshipDescription.getRelationshipPropertiesEntity(),
701-
valueEntry, relationshipsFromResult, nodesFromResult);
709+
Object relationshipProperties = fetchMore
710+
? map(relatedEntityRelationship, (Neo4jPersistentEntity<?>) relationshipDescription.getRelationshipPropertiesEntity(), valueEntry, relationshipsFromResult, nodesFromResult)
711+
: knownObjects.getObject(getInternalId(relatedEntityRelationship));
712+
702713
relationshipsAndProperties.add(relationshipProperties);
703714
mappedObjectHandler.accept(relatedEntity.get(RelationshipDescription.NAME_OF_RELATIONSHIP_TYPE).asString(), relationshipProperties);
704715
} else {

0 commit comments

Comments
 (0)