zoukankan      html  css  js  c++  java
  • Hibernate 与 Oracle 11g 的问题

        前两天我发了一篇博文Win7启动Oracle出错,于是我安装了Oracle的最新版本 Oracle11g,这也许是因我比较热衷于Win7吧,否则也不会想着用高版本的Oracle装来装去的,要知道Oracle安装过程也很麻烦的,而且还很大,很占空间。但这次我也是无能为力了,各种方法都尝试了,可以说是黔驴技穷了,就一个Oracle 10g我还反复装了好几遍呢。

        最后我我耗费了几天的时间终于把Oralce11g下载来了,网速不好,没办法。还好功夫不负有心人,我终于把它给下载下来了,下载完的那一瞬间真叫一个激动啊!啥也别说了,还等啥呢,装吧!于是乎就装了起来,咦!安装的界面也变了,哦,我知道这真是高版了。最后装好了,也建好自己需要的几个用户,随便写几个SQL,嗯效果不错,可以睡个安稳的觉了!

        今天上午呢,我是有点空闲的时间了,反正其它不太紧急的事情我也是懒得弄了,于是就把我们正在做的系统的数据库表往我本机的Oracle还原一份吧,其实非常的easy,哎还是眼高手低了,竟然让我搞了将近两个小时,真是惭愧的没法说!就当自己又温习了一遍了。OK,现在数据库表和数据也都还原了,接下就是在本机测试系统了,哎,麻烦就自此开始了!一运行,起不来,哦,忘了改数据库连接。改好后,再运行,还是没有起来,我的脸色开始变了,心里有稍微有点发毛了!仔细看了一下日志:

    Caused by: org.hibernate.HibernateException: unknown Oracle major version [11]
        at org.hibernate.dialect.DialectFactory$1.getDialectClass(DialectFactory.java:150)

    偶滴个神啊,知道是怎么回事了吧?高版本惹的祸啊!这可咋办勒,很easy啦,下载Oracle11g的JDBC驱动不就OK了吗?嗯,按道理来说换个最新的JDBC驱动就能解决这个问题,那继续吧。就开Google啦,这个可以在Oracle官方的网站资源里找得到 http://www.oracle.com/technology/global/cn/software/tech/java/sqlj_jdbc/htdocs/jdbc_111060.html

    这个地址里可以下载各个版的Oracle驱动。直接下载一个不就OK了吗?可是下载还要用户名和密码,你说Oralce这么牛X的公司也真够操蛋的啊,不就下载一个1M多的驱动吗?你TMD还要Ye登录,我就登录吧,可是一登没登上,二登也没有登上,再几登也登不上了,找回密码吧,官网的这个服务还给停止了,那就再注册一个帐号算了,一看那个复杂的填写步骤,哎,算了吧,我还是另谋他路吧。于是继续Google,不一会就找着了一个资料,是在CSDN上的,这个上载的同学也是很操蛋,还要用3分才能下载,我就那么几分了,哎,咬咬牙下载吧!好了,按说这次换成最新的驱动了,程序应该跑起来了吧?凡事不能想当然啊,解决了这个问题可又出现其它的问题了!还是启动不了,可能是现在用的Hiberate 版本不支持Orable 11g,那再找个最新的Hibernate版本吧。

         我看下正在使用的Hibernate 的版本是:3.2.6.ga ,估计这个版本比较古老了,于是就又下载了最版 3.6.0.Final版,引入它所依赖的jar,一运行又出错了:

    严重: Error while registering Oracle JDBC Diagnosability MBean.
    javax.management.MalformedObjectNameException: Invalid character '
    ' in value part of property
        at javax.management.ObjectName.construct(ObjectName.java:602)
        at javax.management.ObjectName.<init>(ObjectName.java:1403)
        at oracle.jdbc.driver.OracleDriver.registerMBeans(OracleDriver.java:303)
        at oracle.jdbc.driver.OracleDriver$1.run(OracleDriver.java:213)
        at java.security.AccessController.doPrivileged(Native Method)
        at oracle.jdbc.driver.OracleDriver.<clinit>(OracleDriver.java:209)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)

    这下还真麻烦了,各种方法都尝试了呀,怎么还是不行?再把JDBC换回原来的怎么样?再试试,JDBC又换回来的 ojdbc14.jar ,再运行,奇迹出现了,它跑起来了!这么一个简单的问题,竟然折腾我一个半死,或许一开始就把问题给定位错了,应该早就想到是Hibernate 支持 Oracle的问题了!不管怎么样吧,问题总算解决了!

    总结: 使用Oracle11g 数据库时,Hibernate 必须得用最新版本:3.6.0.Final , JDBC驱动不用更新。

    下载Hibernate 3.6相关资源 :hibernate-distribution-3.6.0.lib.zip

  • 相关阅读:
    【设计】概要设计-详细设计-到底需要输出什么???
    【Java】Eclipse代码格式化-代码模板
    【Scala】Scala学习资料
    【Java】阿里巴巴Java开发手册(纪念版)
    【Storm】学习笔记
    【HBase】学习笔记
    【Hadoop】Combiner的本质是迷你的reducer,不能随意使用
    【Hadoop】mapreduce采用多进程与spark采用多线程比较
    【ES】elasticsearch学习笔记
    【MySQL】MySQL统计NULL字段处理
  • 原文地址:https://www.cnblogs.com/jakemanse/p/1932918.html
Copyright © 2011-2022 走看看