hibernate方言?

lvjbypge  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(412)

我有一个用来连接 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>

更新
我尝试了许多不同的价值观,但都不起作用(我还没有找到apachehive安装使用的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

然后代码会遇到 NullPointerExceptionorg.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure() (最终版本4.2.0中的第207行)。
我下载了hibernate的源代码并跟踪了逻辑。导致异常的原因是变量前面的几行 dialect (属于类型) Dialect )他决心 null 由于尝试执行第138行时捕获到异常:

metaReportsDDLCausesTxnCommit = meta.dataDefinitionCausesTransactionCommit();

例外是

java.sql.SQLException: Method not supported

(导致上述警告信息的原因)
那是不是意味着我不能使用 Hibernate 用ApacheHive?如果是这样的话,那就这样吧(我想我得换掉 Hibernate 但我很想知道这个问题的权威答案。
在互联网上我找不到有力的证据表明人们一直在使用 Hibernate 成功使用apache hive。

1yjd4xko

1yjd4xko1#

我在这里回答我自己的问题。
我认为答案是“不——hibernate没有hive/sparksql的方言”。显然,hibernate中不支持hiveserver2(即不支持hive元存储)。我相信这是真的(95%置信度)截至目前(2017-10-19)。
在我的例子中,我最终重写了我的代码并替换了hibernate代码来指导jdbc代码。我很幸运,那里的hibernate代码只用于简单的db查询( session.createSQLQuery() )不是很严重,所以改变相对容易。

相关问题