Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBOSS部署在oracle主版本11上具有HibernateException_Java_Oracle_Hibernate_Jboss 4.2.x_Dialect - Fatal编程技术网

Java JBOSS部署在oracle主版本11上具有HibernateException

Java 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-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-config>  
    </loader-repository>
</jboss-app>
注意:我们正在使用JBoss-Seam-2.2.0.GA

已尝试:,和

请让我知道如果需要任何额外的信息,我正试图把jboss中可用的libs撤到ear

更新:尝试

  • 发现应用程序正在使用2个不同的会话,并且
    还有一个hibernate.cfg.xml用于另一个遗留代码 其中没有指定方言
  • 因此,将Oracle10g方言添加到 xml,它停止抛出上述未知oracle 版本错误,但由于无法加载 10种方言
  • 美妙之处在于两个会话都指向同一个数据源
  • 尝试添加

    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 + "]");
            }