最近一段时间,我在用spring 2.0 + hibernate 3.1 + MyEclipse6.5 整合开发项目的时候都出现了这个问题。异常的截图如下:
很是头大、还有在用hibernate映射反转的时候、也会报这样的错误、
这个其实和hibernate的dialect(方言)配置有关!也就是说它的判断应该是这样的逻辑:
也就是说它的判断应该是这样的逻辑:
MAPPERS.put(
"Oracle",
new DatabaseDialectMapper() {
public String getDialectClass(int majorVersion) {
switch ( majorVersion ) {
case 8: return Oracle8iDialect.class.getName();
case 9: return Oracle9iDialect.class.getName();
case 10: return Oracle10gDialect.class.getName();
default: throw new HibernateException( "unknown Oracle major version [" + majorVersion + "]" );
}
}
}
); 正好有个项目开发环境用了Oracle 11g。那么也同样遇到了这个问题。
看上面的代码就知道了,只有对10g的支持。
后来经过一番研究发现如果是标准的11g,那么将dataSource相关的xml配置里dialect相关的地方用10g的方言也是可以支持的。配置如下:
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle10gDialect
</prop>
</props>
</property>注意到版本了吧,如果你用的是Oracle9i那么就改成Oracle9iDialect就可以了。
当然,从上面的代码看造成这个问题不一定只有这一个原因,查看Oracle的jdbc驱动发现也有对org.hibernate.dialect的支持。请使用ojdbc14.jar的驱动,12版的驱动对dialect的支持并不是太好。在有就是可能你在配置数据库联接的时候有操作上的问题。不管怎么说他都是没有找到相匹配的方言造成的。
还有一种就是自己的不细心了、一定要添加数据库连接的DB Driver不然也会爆unknown Oracle major version[11] 这个错误的。
问题解决了就好、XiaoFeng继续往后写代码。
呵呵、猫咪很可爱的哦