Java JBOSS部署在oracle主版本11上具有HibernateException
尝试在JBoss-4.2.3.GA中使用以下设置部署应用程序ear文件 jboss app.xmlJava JBOSS部署在oracle主版本11上具有HibernateException,java,oracle,hibernate,jboss-4.2.x,dialect,Java,Oracle,Hibernate,Jboss 4.2.x,Dialect,尝试在JBoss-4.2.3.GA中使用以下设置部署应用程序ear文件 jboss app.xml <jboss-app> <loader-repository> com.xxxx.xxx:loader=<ear-name> <loader-repository-config> java2ParentDelegation=false </loader-repository-con
<jboss-app>
<loader-repository>
com.xxxx.xxx:loader=<ear-name>
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</jboss-app>
注意:我们正在使用JBoss-Seam-2.2.0.GA
已尝试:,和
请让我知道如果需要任何额外的信息,我正试图把jboss中可用的libs撤到ear
更新:尝试
还有一个hibernate.cfg.xml用于另一个遗留代码 其中没有指定方言李>
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
也可访问JBoss/server/default/deploy/ejb3.deployer/META-INF/persistence.properties
它适用于JBoss-4.2.3.GA捆绑的Hibernate 3.2.4.sp1和ojdbc5 11.1.0.6.0(都在JBoss全局libs中)
更新
还要重新检查类路径中是否没有旧版本的hibernate
JBoss-Seam-2.2.0.GA发行包hibernate 3.3.1.GA,同时建议最近的JDBC驱动程序至少需要hibernate 3.3.2+
JBoss-4.2.3.GA的捆绑版Hibernate 3.2.4.sp1可能有一些现代化的后端口工作人员。我从未遇到过这种例外情况,但对我来说,这听起来非常清楚:
Hibernate的工厂应该维护数据库引擎类型的某种映射
(包括版本)到实际方言。整个问题是您没有到Oracle 11的注册映射
作为第一个赌注,我会看看这门课。我不知道你有什么版本的hibernate,但看起来Oracle 11根本不受支持,至少我找到的源代码不支持(看看)看看“映射器”散列映射,你会看到。。。此处为开放源代码规则;)
因此,我认为最好将hibernate升级到最新版本(只需检查在最新版本中映射器是否更新)。
或者至少调试应用程序服务器,以确定哪些参数传递给方法,等等
当然,也可以构建自定义版本的Hibernate,但我不认为它是一个更好的解决方案
我也会考虑重写默认的方言,正如你在“那篇文章中已经找到的”:我不明白为什么它不起作用,但是你最好还是调试它。
也许你应该在某处告诉JBoss它也应该使用你的方言
希望这有帮助
public String getDialectClass(int majorVersion) throws Throwable
{
switch(majorVersion)
{
case 8: // '\b'
return (DialectFactory.class$org$hibernate$dialect$Oracle8iDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle8iDialect : (DialectFactory.class$org$hibernate$dialect$Oracle8iDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle8iDialect"))).getName();
case 9: // '\t'
return (DialectFactory.class$org$hibernate$dialect$Oracle9iDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle9iDialect : (DialectFactory.class$org$hibernate$dialect$Oracle9iDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle9iDialect"))).getName();
case 10: // '\n'
return (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle10gDialect : (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle10gDialect"))).getName();
case 11: // '\013'
return (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle10gDialect : (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle10gDialect"))).getName();
}
throw new HibernateException("unknown Oracle major version [" + majorVersion + "]");
}
实际上,这是DialogFactory中的代码,因此当您的数据库版本更改到11以上时,您将遇到此问题。我添加了额外的交换机外壳,它解决了我的问题。Hibernate没有针对Oracle 11g的专用方言。Oracle10g方言很好用。看见hibernate的最新版本可能与JBoss 4.2.3.GA存在兼容性问题。尽管如此,调试始终是一个选项。最后,它使用了ojdbc14 10.2.0.3.0
而不是ojdbc5 11.2.0.3
。可能是cfg.xml文件正在寻找一种普通方言,它可以在ojdbc14中找到,而不是在ojdbc5中。有人对这种行为有什么看法吗?
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
public String getDialectClass(int majorVersion) throws Throwable
{
switch(majorVersion)
{
case 8: // '\b'
return (DialectFactory.class$org$hibernate$dialect$Oracle8iDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle8iDialect : (DialectFactory.class$org$hibernate$dialect$Oracle8iDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle8iDialect"))).getName();
case 9: // '\t'
return (DialectFactory.class$org$hibernate$dialect$Oracle9iDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle9iDialect : (DialectFactory.class$org$hibernate$dialect$Oracle9iDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle9iDialect"))).getName();
case 10: // '\n'
return (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle10gDialect : (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle10gDialect"))).getName();
case 11: // '\013'
return (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle10gDialect : (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle10gDialect"))).getName();
}
throw new HibernateException("unknown Oracle major version [" + majorVersion + "]");
}