Hibernate Oracle 12c无法确定方言

时间:2015-05-26 10:15:39

标签: oracle hibernate

我正在尝试使用hibernate版本3.6.10.Final连接到Oracle 12c。 当我做 org.hibernate.cfg.configuration.buildSessionFactory()

我得到了

org.hibernate.HibernateException:无法确定要使用的Dialect [name = Oracle,majorVersion = 12];用户必须注册解析器或明确设置' hibernate.dialect'。

当我使用Oracle 11g时,我没有遇到此问题,方言会被自动检测到org.hibernate.dialect.Oracle10gDialect。 为什么对于Oracle 12c来说它不起作用。

由于

3 个答案:

答案 0 :(得分:1)

你的版本中的Hibernate无法猜测Oracle12c使用什么方言。 但是,您可以强制使用Oracle10方言。

这是一个弹簧配置和databasePlatform属性来完成这项工作。

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
  <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="generateDdl" value="true"/>
    <property name="showSql" value="true" />
    <!-- this property forces Oracle10 on Oracle12c since Hibernete cannot guess it! -->
    <property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect"/>
  </bean>
</property>

答案 1 :(得分:0)

Hibernate 3.6.10不支持Oracle 12. StandardDialectResolver无法解析Oracle12的方言

答案 2 :(得分:0)

此问题甚至出现在Oracle19c中。因此最好将hibernate升级到Hibernate 5.4及更高版本,然后在persistence.xml中使用以下属性:

<property name="databasePlatform" value="org.hibernate.dialect.Oracle12cDialect"/>

请注意,使用的方言适用于Oracle12c,但也适用于Oracle19c。当Hibernate无法自行识别方言时,必须明确提供该信息。