在ActiveRecord中使用OrientDB的JDBC驱动程序的正确方法是什么?
我正在尝试将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) ...
解决方法
虽然activerecord-jdbc-adapter(理论上)支持任何JDBC编译驱动程序,但它使用API并做出一些假设,这些假设可能对少数人来说效果不佳. ESP.使用不完全兼容的驱动程序,例如orientdb-jdbc(至少版本1.4).
在这种情况下,AR-JDBC尝试从DB元数据中解析支持的类型:http://git.io/s7g47A,但由于Metadata.getTypeInfo()返回意外的null而不是实际的ResulSet对象,所以都会严重失败.这可以通过覆盖Ruby中的native_database_types方法和/或AR-JDBC方面的一些额外代码来处理“null”类型来改进 – 尽管对于OrientDB的“驱动程序”,它仍然可能不足以使它完全使用AR-JDBC. ..听起来非常适合AR-JDBC扩展(假设OrientDB可以处理ActiveRecors / AREL将生成的sql).