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