diff --git a/src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java b/src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java index 3781d45b0..01a9e8593 100644 --- a/src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java +++ b/src/main/java/org/springframework/data/neo4j/core/Neo4jTemplate.java @@ -48,6 +48,7 @@ import org.neo4j.cypherdsl.core.Statement; import org.neo4j.cypherdsl.core.renderer.Configuration; import org.neo4j.cypherdsl.core.renderer.Renderer; import org.neo4j.driver.Value; +import org.neo4j.driver.Values; import org.neo4j.driver.exceptions.NoSuchRecordException; import org.neo4j.driver.summary.ResultSummary; import org.neo4j.driver.types.Entity; @@ -335,15 +336,20 @@ public final class Neo4jTemplate implements .getResults(); } - private Object convertIdValues(@Nullable Neo4jPersistentProperty idProperty, Object idValues) { + private Object convertIdValues(@Nullable Neo4jPersistentProperty idProperty, @Nullable Object idValues) { if (idProperty != null && ((Neo4jPersistentEntity) idProperty.getOwner()).isUsingInternalIds()) { return idValues; } - return neo4jMappingContext.getConversionService().writeValue(idValues, - ClassTypeInformation.from(idValues.getClass()), - idProperty == null ? null : idProperty.getOptionalConverter()); + if (idValues != null) { + return neo4jMappingContext.getConversionService().writeValue(idValues, ClassTypeInformation.from(idValues.getClass()), idProperty == null ? null : idProperty.getOptionalConverter()); + } else if (idProperty != null) { + return neo4jMappingContext.getConversionService().writeValue(idValues, idProperty.getTypeInformation(), idProperty.getOptionalConverter()); + } else { + // Not much we can convert here + return Values.NULL; + } } @Override diff --git a/src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jTemplate.java b/src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jTemplate.java index de4b932cd..aef8a7a67 100644 --- a/src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jTemplate.java +++ b/src/main/java/org/springframework/data/neo4j/core/ReactiveNeo4jTemplate.java @@ -19,6 +19,7 @@ import static org.neo4j.cypherdsl.core.Cypher.anyNode; import static org.neo4j.cypherdsl.core.Cypher.asterisk; import static org.neo4j.cypherdsl.core.Cypher.parameter; +import org.neo4j.driver.Values; import org.springframework.data.neo4j.core.mapping.IdDescription; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -320,15 +321,20 @@ public final class ReactiveNeo4jTemplate implements return createExecutableQuery(domainType, null, queryFragmentsAndParameters); } + private Object convertIdValues(@Nullable Neo4jPersistentProperty idProperty, @Nullable Object idValues) { - private Object convertIdValues(@Nullable Neo4jPersistentProperty idProperty, Object idValues) { - - if (((Neo4jPersistentEntity) idProperty.getOwner()).isUsingInternalIds()) { + if (idProperty != null && ((Neo4jPersistentEntity) idProperty.getOwner()).isUsingInternalIds()) { return idValues; } - return neo4jMappingContext.getConversionService().writeValue(idValues, - ClassTypeInformation.from(idValues.getClass()), idProperty == null ? null : idProperty.getOptionalConverter()); + if (idValues != null) { + return neo4jMappingContext.getConversionService().writeValue(idValues, ClassTypeInformation.from(idValues.getClass()), idProperty == null ? null : idProperty.getOptionalConverter()); + } else if (idProperty != null) { + return neo4jMappingContext.getConversionService().writeValue(idValues, idProperty.getTypeInformation(), idProperty.getOptionalConverter()); + } else { + // Not much we can convert here + return Values.NULL; + } } @Override