Neo4j 特有转换
Neo4j 并不支持关系型世界中使用的所有类型。对于其中一些类型,我们提供了转换,这些转换也在诸如 Spring Data Neo4j (SDN) 等框架中可用。这些转换在本驱动中同样可用,因此您可以交替使用 SDN 与本驱动。
定点算术的数据类型
Neo4j 不支持 BigInteger 和 BigDecimal。唯一的存储方式是将其保存为 String,然后在读取时转换回相应的类型。这与 SDN 和 OGM 的做法保持一致。
将这些类型的任何参数传递给 PreparedStatement 或 CallableStatement 时,都会以 String 形式存储,但可以通过结果集上的相应方法读取回来。
SQL 日期、时间和时间戳
java.sql.Date-
映射到 Cypher 的
DATE java.sql.Time-
映射到 Cypher 的
LOCAL TIME java.sql.Timestamp-
映射到 Cypher 的
LOCAL DATETIME
有关 Cypher® 日期类型的信息,请参阅 Temporal types。
若需更精确的映射,请使用具有相应类型的 Neo4j Value 实例,并使用其 setObject 与 getObject 方法。
向量支持
| 要在 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 ResultSet 的 getObject 方法来访问,传入字段的索引或名称以及类型 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 访问。