Neo4j 在Cypher CREATE子句中指定属性的基元类型

Neo4j 在Cypher CREATE子句中指定属性的基元类型,neo4j,cypher,Neo4j,Cypher,与Java API相反,似乎没有办法指定数值属性是字节、短、int还是长: CREATE (n:Test {value: 1}) RETURN n 似乎总是创建一个long属性。我试过toInt(),但显然,从数学意义上理解“整数”要比从计算机数据类型意义上理解的多 有没有什么我忽略了的方法,可以真正强制这种类型 我们已经定义了一个模型,并希望使用Cypher语句插入测试数据,但是使用该数据的代码随后会失败,出现ClassCastException,因为类型不匹配。如果使用嵌入的API运行Cy

与Java API相反,似乎没有办法指定数值属性是
字节
int
还是

CREATE (n:Test {value: 1}) RETURN n
似乎总是创建一个
long
属性。我试过
toInt()
,但显然,从数学意义上理解“整数”要比从计算机数据类型意义上理解的多

有没有什么我忽略了的方法,可以真正强制这种类型


我们已经定义了一个模型,并希望使用Cypher语句插入测试数据,但是使用该数据的代码随后会失败,出现
ClassCastException
,因为类型不匹配。

如果使用嵌入的API运行Cypher查询,那么 您可以在hashmap中提供具有正确类型值的参数

对于远程用户来说,这并不重要,因为它来回地进行JSON序列化,这会丢失类型信息。所以它只是“数字”

为什么您关心数字类型


您也可以只使用
((Number)n.getProperty(“value”)).xxxValue()
(xxx=int,long,byte)

我关心这些类型,因为Neo4j本身支持不同的类型,因此实际使用最合适的类型来避免浪费(磁盘)空间是非常有用的。另外,在代码中使用
long
表示四舍五入的百分比似乎有点过分,因此我们一直在使用
int
(是的,我知道它适合
字节
)。您所说的JSON序列化实际上是很有启发性的,因为这意味着在远程模式下使用Spring data Neo4j插入数据时,我们实际上将为所有内容提供
long
存储。我想我们将直接使用
long
s。作为旁注,使用
Number.xxxValue()
比只使用
(int)n.getProperty(“value”)
要重一些,可读性也差一些。