从旧版本或其他 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>/becomesjdbc:neo4j://<host>:<port>/ -
jdbc:neo4j:neo4j+s://<host>:<port>/becomesjdbc:neo4j+s://<host>:<port>/ -
jdbc:neo4j:neo4j+ssc://<host>:<port>/becomesjdbc:neo4j+ssc://<host>:<port>/
以下配置属性 不受支持且没有替代方案
-
leaked.sessions.logging -
readonly -
usebookmarks -
max.transaction.retry.time(此驱动没有内置的重试机制)
与任何持久化数据库连接一样,您需要处理事务失败的情况。我们在使用 resilience4j 时获得了良好体验,它与常见的 Java 框架(如 Spring Boot)非常兼容。
以下属性可以通过标准化的 JDBC 设置实现
-
encryption— 使用适当的传输方案(neo4j、neo4j+s或neo4j+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 驱动支持复杂对象类型作为返回类型。