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

Neo4j 有其他一些 JDBC 驱动,拥有不同的许可证以及不同的功能和特性。以下我们概述可能的迁移过程。所有 Neo4j JDBC 驱动的基本使用模式非常相似:最终,这仅仅是使用符合 JDBC 标准的驱动,并且您可以按照原始 关于 JDBC 的 Java 教程 中所述的方式使用它。

从此驱动的 4 版或 5 版迁移

Neo4j JDBC 驱动的第 5 版和第 4 版主要由 Larus BA, Italy 开发,它是 Neo4j 的认证咨询和集成解决方案合作伙伴。

您需要进行的最重要的更改是移除对 org.neo4j:neo4j-jdbc-bolt 的依赖。请将其替换为 org.neo4j:neo4j-jdbc 或我们提供的其中一个捆绑包,参见 available bundles

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>/ becomes jdbc:neo4j://<host>:<port>/

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

  • jdbc:neo4j:neo4j+ssc://<host>:<port>/ becomes 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.timeout 等同于 timeout(作为 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。更多信息,请参见 Star-Selects

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

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