1. 程式人生 > >新手小白自學hibernate,官方文檔錯誤,導致的坑爹歷程

新手小白自學hibernate,官方文檔錯誤,導致的坑爹歷程

開始 images ota cli 沒有 奇怪 測試 4.3 XML

因為是自學的hibernate,所以我先是上網找了些hibernate的視頻來看了幾天,再瀏覽的官方文檔,最後才開始動手做實踐操作,沒想到剛開始就出問題了,我將官方文檔上的hibernate.cfg.xml完全copy到項目的src目錄下,然後修改數據庫連接信息,搭建好log4j、junit,當我滿懷希望的開始我的第一個小程序時,才發現我下載的hibernate是4.2.21,而看的視頻是hibernate3的視頻,視頻中創建SessionFactory的方法:

  SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();

  AnnotationConfiguration類和buildSessionFactory()參數為空的方法已經過期,然後我查官方文檔後改成了:

技術分享

  SessionFactory sf = new Configuration().configure().buildSessionFactory(new StandServiceRegistryBuilder().build());

  來創建,結果myeclipse竟然顯示找不到 org.hibernate.boot.registry.StandardServiceRegistryBuilder這個包,我頓時就蒙逼了,這是個什麽情況,官方手冊上明明白白寫著,竟然沒有,然後我在百度一通好找,什麽收獲也沒有,最後在hibernate4.2.21的官方API中找了半天,發現竟然真的沒有這個包,然後本著版本可能有問題的想法上hibernate官網下載了兩個最新版的hibernate5.2.10和hibernate4.3.11,因為看見hibernate5.2.10是今年剛出的,可能有BUG,所以多下了幾個,然後我在5.2.10中沒有找到manual手冊,因此看不懂最新版的,所以就用的4.3.11版的,查手冊和API文檔,發現獲得SessionFactory的寫法和上面的圖一樣,只是這回API中有org.hibernate.boot.registry.StandardServiceRegistryBuilder這個類了,然後高高興興的一步步寫,用junit測試,竟然不發SQL語句,在myeclips中什麽錯誤也不報,這就很尷尬了,我又查了半天,能用的方法都用上了,最後在:

SessionFactory sf = new Configuration().configure().buildSessionFactory(new StandServiceRegistryBuilder().build());

這段代碼上加了try-catch,myeclips才報錯,報的錯也奇怪:

技術分享

方言沒有配置,於是我又檢查了好幾遍自己在hibernate.cfg.xml中的配置,發現都沒問題,沒轍了,在這都折騰好幾個小時了,最後都快要放棄的時候,還是覺得度娘上絕對有大牛前輩遇到過這個問題,應該有答案,只是我還沒找到而已。終於,功夫不負有心人,真的讓我找到了一篇博客,那位前輩在上面說這是官方文檔上的錯誤,官方文檔上的寫法沒有拿到hibernate.dialect的配置,正確的寫法是:

技術分享

最後,那個junit不報錯,我覺得應該是一個BUG

總結:有付出就會有回報,不管多麽困難的問題只要你努力的去找答案,總會找到的!希望各位小夥伴們都能克服學習的困難哦!

新手小白自學hibernate,官方文檔錯誤,導致的坑爹歷程