如何固定地确保neo4j将为属性

时间:2016-03-03 12:23:24

标签: java neo4j cypher

我使用neo4j 2.3版本和事务端点上的直接调用进行了一些实验

http://localhost:7474/db/data/transaction/commit

并创建具有长属性

的节点
curl -X POST -H "Content-Type: application/json" -d '{
"statements" : [ {
"statement" : "MERGE (c:`foo` {id:{_queryId}}) ON CREATE SET  c.`created`={created} RETURN c",
"parameters" : {
  "created" : 1111111111111111111
}}]
}'
"http://localhost:7474/db/data/transaction/commit"

在客户端读取此数据时(Java,Jersey,REST客户端) 我收到long或int取决于值 看起来neo4j在返回结果时压缩数据 我用纯邮差调用证明它 - 所以这显然是neo4j服务器端问题 - 如下

{
 "statements" : [ {
 "statement" : "MATCH c RETURN TYPE(c.created)"
 } ]
}

我得到了

  "code": "Neo.DatabaseError.Statement.ExecutionFailure",
  "message": "java.lang.Long cannot be cast to org.neo4j.graphdb.Relationship",
  "stackTrace": "java.lang.ClassCastException: java.lang.Long cannot be cast to org.neo4j.graphdb.Relationship\

  "code": "Neo.DatabaseError.Statement.ExecutionFailure",
  "message": "java.lang.Integer cannot be cast to org.neo4j.graphdb.Relationship",
  "stackTrace": "java.lang.ClassCastException: java.lang.Integer cannot be cast to org.neo4j.graphdb.Relationship

作为一个消费者,我有没有办法让我永远变长?

此致

1 个答案:

答案 0 :(得分:0)

这实际上是由于REST客户端。为了保持一致,最好期望java.lang.Number,然后对其进行longValue()

但是,您在帖子中显示的例外情况是因为您尝试在号码上使用TYPE功能。 TYPE期望关系,并返回关系类型。