我们通过测试使用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);
这是一个错误吗?