GH-2791 - Support map with entity (list) as query parameter.
Closes #2791
This commit is contained in:
@@ -209,6 +209,11 @@ abstract class Neo4jQuerySupport {
|
||||
return result;
|
||||
}
|
||||
|
||||
if (parameter instanceof Map<?, ?> mapValue) {
|
||||
return mapValue.entrySet().stream()
|
||||
.collect(Collectors.toMap(Map.Entry::getKey, v -> convertParameter(v.getValue(), conversionOverride)));
|
||||
}
|
||||
|
||||
return mappingContext.getConversionService().writeValue(parameter,
|
||||
TypeInformation.of(parameter.getClass()), conversionOverride);
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@ import org.springframework.data.neo4j.integration.issues.gh2289.Sku;
|
||||
import org.springframework.data.neo4j.integration.issues.gh2289.SkuRO;
|
||||
import org.springframework.data.neo4j.integration.issues.gh2289.SkuRORepository;
|
||||
import org.springframework.data.neo4j.integration.issues.gh2289.SkuRepository;
|
||||
import org.springframework.data.neo4j.integration.issues.gh2323.Knows;
|
||||
import org.springframework.data.neo4j.integration.issues.gh2323.Language;
|
||||
import org.springframework.data.neo4j.integration.issues.gh2323.Person;
|
||||
import org.springframework.data.neo4j.integration.issues.gh2323.PersonService;
|
||||
@@ -533,6 +534,16 @@ class IssuesIT extends TestBase {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@Tag("GH-2791")
|
||||
void ensureMapOfRelationshipGetsSerialized(@Autowired PersonService personService) {
|
||||
Knows knowsRelationship = new Knows("somedescription", new Language("German"));
|
||||
|
||||
Person person = personService.queryWithMapOfRelationship("someKey", knowsRelationship);
|
||||
|
||||
assertThat(person.getName()).isEqualTo("Helge");
|
||||
}
|
||||
|
||||
@Test
|
||||
@Tag("GH-2326")
|
||||
void saveShouldAddAllLabels(@Autowired AnimalRepository animalRepository,
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.springframework.data.neo4j.integration.issues.gh2323;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.data.neo4j.repository.Neo4jRepository;
|
||||
import org.springframework.data.neo4j.repository.query.Query;
|
||||
@@ -28,7 +29,7 @@ import org.springframework.stereotype.Repository;
|
||||
@Repository
|
||||
public interface PersonRepository extends Neo4jRepository<Person, String> {
|
||||
|
||||
// Using separate id and than relationships on top level
|
||||
// Using separate id and then relationships on top level
|
||||
@Query("""
|
||||
UNWIND $relations As rel WITH rel
|
||||
MATCH (f:Person {id: $from})
|
||||
@@ -60,4 +61,12 @@ public interface PersonRepository extends Neo4jRepository<Person, String> {
|
||||
RETURN f, frl, mt, collect(r), collect(t)
|
||||
""")
|
||||
Person updateRelWith11(@Param("person") Person person);
|
||||
|
||||
@Query("""
|
||||
UNWIND keys($relationships) as relationshipKey
|
||||
UNWIND $relationships[relationshipKey] as relationship
|
||||
MATCH (p:Person)-[:HAS_MOTHER_TONGUE]->(:Language{name: relationship.__target__.__id__})
|
||||
RETURN p
|
||||
""")
|
||||
Person queryWithMapOfRelationship(@Param("relationships") Map<String, List<Knows>> relationshipList);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package org.springframework.data.neo4j.integration.issues.gh2323;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -66,4 +67,8 @@ public class PersonService {
|
||||
|
||||
return original;
|
||||
}
|
||||
|
||||
public Person queryWithMapOfRelationship(String key, Knows knows) {
|
||||
return personRepository.queryWithMapOfRelationship(Map.of(key, List.of(knows)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user