我正在尝试使用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来说它不起作用。
由于
答案 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无法自行识别方言时,必须明确提供该信息。