8

将 OrientDB 的 JDBC 驱动程序与 ActiveRecord 一起使用的正确方法是什么?

我正在尝试将 Rails 3.2 应用程序连接到 OrientDB 1.4。我安装了 gem activerecord-jdbc-adapter,并配置database.yml如下:

development:
  adapter: jdbc
  username: admin
  password: admin
  driver:   com.orientechnologies.orient.jdbc.OrientJdbcDriver
  url:      jdbc:orient:local:db/test_db2

我加载 OrientDB 的 JDBC 驱动程序如下:

# in config/application.rb:
require '/home/myuser/jars/orientdb-jdbc-1.4.0-all.jar'

应用程序启动时抛出以下异常(使用rails s):

java.lang.NullPointerException
    at arjdbc.jdbc.RubyJdbcConnection.unmarshalResult(RubyJdbcConnection.java:1187)
    at arjdbc.jdbc.RubyJdbcConnection.set_native_database_types(RubyJdbcConnection.java:537)
    at arjdbc.jdbc.RubyJdbcConnection$INVOKER$i$0$0$set_native_database_types.call(RubyJdbcConnection$INVOKER$i$0$0$set_native_database_types.gen)
    ...

我的配置中是否缺少某些内容?将 OrientDB 的 JDBC 驱动程序与 ActiveRecord 一起使用的正确方法是什么?

4

1 回答 1

1

虽然activerecord-jdbc-adapter(理论上)支持任何 JDBC 编译驱动程序,但它使用 API 并做出一些可能对少数人不太适用的假设。特别是。使用不完全兼容的驱动程序,例如orientdb-jdbc(至少版本 1.4)。

在这种情况下,AR-JDBC 尝试从 DB 元数据中解析支持的类型:http: //git.io/s7g47A但由于metadata.getTypeInfo()返回意外null而不是实际ResulSet对象,所有这些都严重失败。这可以通过覆盖native_database_typesRuby 中的方法和/或 AR-JDBC 端的一些附加代码来处理“null”类型来改进 - 尽管对于 OrientDB 的“驱动程序”来说,它仍然可能不足以使其与 AR-JDBC 完全兼容。 . 听起来非常适合 AR-JDBC 扩展(假设 OrientDB 可以处理 ActiveRecors/AREL 将生成的 SQL)。

于 2014-01-08T19:21:35.223 回答