Skip to content

Commit ccbd5eb

Browse files
committed
GH-2791 - Support map with entity (list) as query parameter.
Closes #2791
1 parent e5c0324 commit ccbd5eb

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed

src/main/java/org/springframework/data/neo4j/repository/query/Neo4jQuerySupport.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,11 @@ final Object convertParameter(Object parameter, @Nullable Neo4jPersistentPropert
209209
return result;
210210
}
211211

212+
if (parameter instanceof Map<?, ?> mapValue) {
213+
return mapValue.entrySet().stream()
214+
.collect(Collectors.toMap(Map.Entry::getKey, v -> convertParameter(v.getValue(), conversionOverride)));
215+
}
216+
212217
return mappingContext.getConversionService().writeValue(parameter,
213218
TypeInformation.of(parameter.getClass()), conversionOverride);
214219
}

src/test/java/org/springframework/data/neo4j/integration/issues/IssuesIT.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
import org.springframework.data.neo4j.integration.issues.gh2289.SkuRO;
8181
import org.springframework.data.neo4j.integration.issues.gh2289.SkuRORepository;
8282
import org.springframework.data.neo4j.integration.issues.gh2289.SkuRepository;
83+
import org.springframework.data.neo4j.integration.issues.gh2323.Knows;
8384
import org.springframework.data.neo4j.integration.issues.gh2323.Language;
8485
import org.springframework.data.neo4j.integration.issues.gh2323.Person;
8586
import org.springframework.data.neo4j.integration.issues.gh2323.PersonService;
@@ -533,6 +534,16 @@ void ensure1To1RelationshipsAreSerialized(@Autowired PersonService personService
533534
});
534535
}
535536

537+
@Test
538+
@Tag("GH-2791")
539+
void ensureMapOfRelationshipGetsSerialized(@Autowired PersonService personService) {
540+
Knows knowsRelationship = new Knows("somedescription", new Language("German"));
541+
542+
Person person = personService.queryWithMapOfRelationship("someKey", knowsRelationship);
543+
544+
assertThat(person.getName()).isEqualTo("Helge");
545+
}
546+
536547
@Test
537548
@Tag("GH-2326")
538549
void saveShouldAddAllLabels(@Autowired AnimalRepository animalRepository,

src/test/java/org/springframework/data/neo4j/integration/issues/gh2323/PersonRepository.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.springframework.data.neo4j.integration.issues.gh2323;
1717

1818
import java.util.List;
19+
import java.util.Map;
1920

2021
import org.springframework.data.neo4j.repository.Neo4jRepository;
2122
import org.springframework.data.neo4j.repository.query.Query;
@@ -28,7 +29,7 @@
2829
@Repository
2930
public interface PersonRepository extends Neo4jRepository<Person, String> {
3031

31-
// Using separate id and than relationships on top level
32+
// Using separate id and then relationships on top level
3233
@Query("""
3334
UNWIND $relations As rel WITH rel
3435
MATCH (f:Person {id: $from})
@@ -60,4 +61,12 @@ RETURN f, collect(r), collect(t)
6061
RETURN f, frl, mt, collect(r), collect(t)
6162
""")
6263
Person updateRelWith11(@Param("person") Person person);
64+
65+
@Query("""
66+
UNWIND keys($relationships) as relationshipKey
67+
UNWIND $relationships[relationshipKey] as relationship
68+
MATCH (p:Person)-[:HAS_MOTHER_TONGUE]->(:Language{name: relationship.__target__.__id__})
69+
RETURN p
70+
""")
71+
Person queryWithMapOfRelationship(@Param("relationships") Map<String, List<Knows>> relationshipList);
6372
}

src/test/java/org/springframework/data/neo4j/integration/issues/gh2323/PersonService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.springframework.data.neo4j.integration.issues.gh2323;
1717

1818
import java.util.List;
19+
import java.util.Map;
1920
import java.util.Optional;
2021
import java.util.stream.Collectors;
2122

@@ -66,4 +67,8 @@ public Optional<Person> updateRel3(String id) {
6667

6768
return original;
6869
}
70+
71+
public Person queryWithMapOfRelationship(String key, Knows knows) {
72+
return personRepository.queryWithMapOfRelationship(Map.of(key, List.of(knows)));
73+
}
6974
}

0 commit comments

Comments
 (0)