我有一个用于连接MySQL
的应用,我有Hibernate
个配置
就像这样:
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://somehost:3306/some_db</property>
...
现在,如果我想要连接到Hive/SparkSQL
,那么会是什么呢?
这些属性的等价值是?
我对driver_class
和url
有一些想法(假设我们使用的是端口10000
),但dialect
应该是什么?
<property name="hibernate.connection.driver_class">org.apache.hive.jdbc.HiveDriver</property>
<property name="hibernate.connection.url">jdbc:hive2://someHost:10000</property>
更新
我尝试了很多不同的值,但没有一个值有效。 (我还没有 找出Apache Hive安装使用的Metastore,所以这里 我只是做了反复试验)
org.hibernate.dialect.MySQLDialect
org.hibernate.dialect.MySQLInnoDBDialect
org.hibernate.dialect.DerbyDialect
org.hibernate.dialect.DerbyTenFiveDialect
org.hibernate.dialect.Oracle10gDialect
org.hibernate.dialect.H2Dialect
org.hibernate.dialect.Dialect
我注意到,在任何情况下,都会发出警告 Hibernate说:
WARN JdbcServicesImpl,main:160 - \
HHH000341: Could not obtain connection metadata : \
Method not supported
然后代码会遇到NullPointerException
在org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure()
(4.2.0.Final中的第207行)。
我下载了Hibernate的源代码并追踪了逻辑。
引起异常是因为变量前面有几行
dialect
(类型Dialect
)被确定为null
尝试执行第138行时遇到异常:
metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit();
例外是
java.sql.SQLException: Method not supported
(导致上述警告信息)
这是否意味着我不能将Hibernate
与Apache Hive一起使用?
如果是这样的话,那就这样吧。 (我想我会的
替换此部分的Hibernate
实现)
但我很想知道权威的答案
对此。
在互联网上,我找不到有力的证据
人们一直在使用{H}成功使用Hibernate
。
答案 0 :(得分:1)
我在这里回答我自己的问题。
对于Hibernate,我认为答案是“不 - Hive / SparkSQL没有方言”。显然,在Hibernate中不支持HiveServer2(即Hive Metastore)。我相信这是真实的(95%信心)截至目前(2017-10-19)。
就我而言,我最终重写了我的代码并替换了Hibernate代码来代替直接使用JDBC代码。我很幸运,那里的Hibernate代码仅用于简单的数据库查询(session.createSQLQuery()
)而不是严重的ORM,因此更改相对容易。