从旧版本或其他 Neo4j JDBC 驱动程序迁移

Neo4j 有其他几个 JDBC 驱动程序,它们在不同的许可证下,具有不同的功能和能力。以下是可能的迁移过程概述。所有 Neo4j JDBC 驱动程序的基本用法模式非常相似:最终,它“仅仅”是使用符合 JDBC 标准的驱动程序,你可以按照原始的Java JDBC 教程中描述的方法使用它。

从此驱动程序的版本 4 或 5 迁移

Neo4j JDBC 驱动程序的版本 5 和 4 主要由Larus BA,意大利开发,该公司是 Neo4j 的认证咨询和集成解决方案合作伙伴。

您需要进行的最重要更改是删除对 org.neo4j:neo4j-jdbc-bolt 的依赖。您需要用 org.neo4j:neo4j-jdbc 或我们提供的捆绑包之一替换它,请参阅可用捆绑包

URL 格式、参数和主驱动程序类

以前版本将来自通用 Java 驱动程序的 URL 映射到 jdbc:,例如,使用 jdbc:neo4j:neo4j+s://foobar.io:7687/ 连接到在主机 foobar.io 上端口 7687 上运行的数据库。

以下 URL(直接 bolt 连接)不受支持

  • jdbc:neo4j:bolt://<host>:<port>/

  • jdbc:neo4j:bolt+s://<host>:<port>/

  • jdbc:neo4j:bolt+ssc://<host>:<port>/

以下 URL 的行为相同,但必须重写

  • jdbc:neo4j:neo4j://<host>:<port>/ 变成 jdbc:neo4j://<host>:<port>/

  • jdbc:neo4j:neo4j+s://<host>:<port>/ 变成 jdbc:neo4j+s://<host>:<port>/

  • jdbc:neo4j:neo4j+ssc://<host>:<port>/ 变成 jdbc:neo4j+ssc://<host>:<port>/

以下配置属性不受支持,也没有替代方案

  • leaked.sessions.logging

  • readonly

  • usebookmarks

  • max.transaction.retry.time(此驱动程序没有内置的重试机制)

与任何持久数据库连接一样,您需要考虑失败的事务。我们对resilience4j 有很好的体验,它与常见的 Java 框架(如 Spring Boot)很契合。

以下属性可以使用标准的 JDBC 设置来实现

  • encryption — 使用适当的传输方案 (neo4jneo4j+sneo4j+ssc)

  • autocommit — 使用 java.sql.Connection.setAutoCommit

可以使用任何符合 JDBC 标准的连接池来实现连接池。以下属性无效

  • max.connection.lifetime

  • max.connection.poolsize

以下属性只是名称不同

  • connection.acquisition.timeouttimeout(作为 URL 的查询参数或在配置属性内部)

以下属性可以使用不同的 URL 来实现

  • database 现在是 URL 的一部分:而不是指定 jdbc:neo4j:neo4j+s://foobar.io:7687?database=abc,您将使用数据库名称作为 URL 中的路径段,例如:jdbc:neo4j+s://foobar.io:7687/abc

如果您的工具需要使用具体的驱动程序类,此 JDBC 驱动程序只有 org.neo4j.jdbc.Neo4jDriver。如果您依赖于 javax.sql.DataSource,我们提供 org.neo4j.jdbc.Neo4jDataSource

扁平化

虽然 Neo4j JDBC 驱动程序不支持 flatten 选项,但它可以模拟其效果。flatten 通过提供所有属性作为单独的列,来取消返回的节点和关系的嵌套。

如果启用自动SQL 到 Cypher® 翻译,任何 * 选择将检查它是否影响节点或关系,并将取消其属性的嵌套,因此 SELECT * FROM Movie m 将有效地变成 MATCH (m:Movie) RETURN m.title AS title, m.released AS released。有关更多信息,请参阅星号选择

如果您想访问实际的节点,请返回整个表别名或只使用 Cypher。

Neo4j JDBC 驱动程序支持复杂对象类型作为返回类型。