Spring Data Neo4j(4.2.0M1)计数Cypher查询返回类型与嵌入式DB不同,远远超过远程数据库

时间:2016-09-26 12:17:22

标签: neo4j cypher spring-data-neo4j spring-data-neo4j-4 embedded-database

我们通过测试使用count cypher查询的代码发现了一个问题。如果测试是针对嵌入式数据库(EmbeddedDriver)运行的,则Result类型中的返回值是Long(或整数,我不记得),并且当针对远程数据库(HttpDriver)运行相同的测试时返回Result类型中的值是Integer(或long;)。

这意味着我们无法实现我们的代码,认为它将在我们的单元测试用例中返回一个Integer,并且当代码用于"生产模式时会产生ClassCastException。针对远程数据库。

当前的解决方法是使用instanceof来正确地转换返回的值,但它确实不具备性能和漂亮......

以下是其中一个查询的示例:

Object result = neo4jSession.query("MATCH (n) RETURN count(n) as result",
                    ...).iterator().next().get("result");

Long value = result instanceof Long ? (Long) result : new Long((Integer) result);

这是一个错误吗?

1 个答案:

答案 0 :(得分:1)

问题会以各种形式偶然出现(例如,请参阅this onethat one)。

最好不要假设某种类型比Number更具体,那么你可以这样做:

long value = ((Number) result).longValue();

instanceof,没有对象创建。