Neo4j 特有转换

Neo4j 并不支持关系型世界中使用的所有类型。对于其中一些类型,我们提供了转换,这些转换也在诸如 Spring Data Neo4j (SDN) 等框架中可用。这些转换在本驱动中同样可用,因此您可以交替使用 SDN 与本驱动。

定点算术的数据类型

Neo4j 不支持 BigIntegerBigDecimal。唯一的存储方式是将其保存为 String,然后在读取时转换回相应的类型。这与 SDN 和 OGM 的做法保持一致。

将这些类型的任何参数传递给 PreparedStatementCallableStatement 时,都会以 String 形式存储,但可以通过结果集上的相应方法读取回来。

SQL 日期、时间和时间戳

java.sql.Date

映射到 Cypher 的 DATE

java.sql.Time

映射到 Cypher 的 LOCAL TIME

java.sql.Timestamp

映射到 Cypher 的 LOCAL DATETIME

有关 Cypher® 日期类型的信息,请参阅 Temporal types

若需更精确的映射,请使用具有相应类型的 Neo4j Value 实例,并使用其 setObjectgetObject 方法。

向量支持

要在 Neo4j 中使用原生向量,您需要兼容的 Neo4j 版本。

Neo4j 驱动支持 Neo4j 的 Vector 数据类型。Vector 类型是一个统一的容器值,固定大小至少为 1、至多为 4096 个元素。后者的限制可能会在未来的 Neo4j 版本中取消。每个元素均为相同的内部类型且不可为 null。

Neo4j Vector 支持以下内部类型

INTEGER8

映射到 Java byte

INTEGER16

映射到 Java short

INTEGER32

映射到 Java int

INTEGER(整数)

映射到 Java long

FLOAT32

映射到 Java float

FLOAT

映射到 Java double

任何查询返回的实例,无论是通过调用 Cypher 构造函数 vector() 还是访问节点或关系属性得到的,都可以使用 JDBC ResultSetgetObject 方法来访问,传入字段的索引或名称以及类型 org.neo4j.jdbc.values.Vector。后者也是在客户端创建实例的入口。

Vector#of(byte[])

创建一个 INTEGER8 向量(Int8Vector

Vector#of(short[])

创建一个 INTEGER16 向量(Int16Vector

Vector#of(int[])

创建一个 INTEGER32 向量(Int32Vector

Vector#of(long[])

创建一个 INTEGER 向量(Int64Vector

Vector#of(float[])

创建一个 FLOAT32 向量(Float32Vector

Vector#of(double[])

创建一个 FLOAT 向量(Float64Vector

该类型拥有一组保证存在的实现(如上所列)。每个实现都提供 toArray(),返回其数据的副本,以匹配的 Java 基元类型数组形式。Vector 实例本身是不可变的。

最后,任何查询返回的向量也可以作为 java.sql.Array 访问。