From d13608964c734cc51465476586261cd52a1fffdd Mon Sep 17 00:00:00 2001 From: Niels Oertel Date: Mon, 28 Oct 2019 14:29:52 +0100 Subject: [PATCH] GH-671 - Fix mapping exception when querying for a narrower type then returned from the database. - Fix check if result type is assignable to provided generic type - Add test to verify result type compatibility check This fixes #671. --- .../neo4j/ogm/session/delegates/ExecuteQueriesDelegate.java | 2 +- .../persistence/session/capability/QueryCapabilityTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/neo4j/ogm/session/delegates/ExecuteQueriesDelegate.java b/core/src/main/java/org/neo4j/ogm/session/delegates/ExecuteQueriesDelegate.java index 1e866de7c5..319a27d433 100644 --- a/core/src/main/java/org/neo4j/ogm/session/delegates/ExecuteQueriesDelegate.java +++ b/core/src/main/java/org/neo4j/ogm/session/delegates/ExecuteQueriesDelegate.java @@ -85,7 +85,7 @@ public T queryForObject(Class type, String cypher, Map paramet T next = results.iterator().next(); - if (!next.getClass().isAssignableFrom(type)) { + if (!type.isAssignableFrom(next.getClass())) { String typeOfResult = next.getClass().getName(); String wantedType = type.getName(); diff --git a/neo4j-ogm-tests/neo4j-ogm-integration-tests/src/test/java/org/neo4j/ogm/persistence/session/capability/QueryCapabilityTest.java b/neo4j-ogm-tests/neo4j-ogm-integration-tests/src/test/java/org/neo4j/ogm/persistence/session/capability/QueryCapabilityTest.java index 03dd9f4ac1..6cc7d61968 100644 --- a/neo4j-ogm-tests/neo4j-ogm-integration-tests/src/test/java/org/neo4j/ogm/persistence/session/capability/QueryCapabilityTest.java +++ b/neo4j-ogm-tests/neo4j-ogm-integration-tests/src/test/java/org/neo4j/ogm/persistence/session/capability/QueryCapabilityTest.java @@ -696,6 +696,12 @@ public void shouldThrowExceptionIfTypeMismatchesInQueryForObject() { Restaurant.class.getName()); } + @Test // GH-671 + public void shouldNotThrowExceptionIfTypeIsSuperTypeOfResultObject() { + session.queryForObject(Long.class, "MATCH (n:User) return count(n)", emptyMap()); + session.queryForObject(Number.class, "MATCH (n:User) return count(n)", emptyMap()); + } + @Test public void queryForObjectFindsNestedClasses() {