Hibernate常見錯誤解答
1、Hibernate自動生成XML Mapping File 失敗
新建hibernate.cfg.xml,有個地方需要選擇hibernate的庫的版本你用的庫和你選的hibernate的版本不一致。你要重新建立hibernate.cfg.xml檔案,並在建立過程中選擇正確的版本.如果用的是教程提供的庫的話選擇4.3就行
2、熟知的構造SessionFactory (hibernate3)的方法已經廢棄
我用的hibernate-release-5.2.3.Final 這個版本就會報錯因為在5.0版本以後廢棄了這個方法從而採用新的方法.
到這裡馬老師就要問了: 那麼我們如果還是想用原來的方法該怎麼辦? 那就下載一個hibernate-release-5.0版本以前的版本就行.
那麼,神馬是ServiceRegistry? 顧名思義,ServiceRegistry是Service的登錄檔,它為Service提供了一個統一的載入/初始化/存放/獲取機制.
現在標準的構造一個SessionFactory的做法是傳遞一個ServiceRegistry例項給Configuration#buildSessionFactory方法, 那麼, 這裡就需要我們首先建立一個ServiceRegistry的例項.
最簡單的做法是:
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder();
ServiceRegistry serviceRegistry = serviceRegistryBuilder.build();
SessionFactory sf = configuration.buildSessionFactory(serviceRegistry);
將會報org.hibernate.MappingException:Unknown entity異常
但是緊接著在4.1之後的版本中,StandardServiceRegistryBuilder又被取消了,取而帶之的做法是
StandardServiceRegistry
standardRegistry =
new
Metadata metadata = new MetadataSources( standardRegistry ).getMetadataBuilder() .applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE ).build();
//建立會話工廠物件
sessionfactory = metadata.getSessionFactoryBuilder().build();
//會話物件
session=sessionfactory.openSession();
//開啟事務
transaction=session.beginTransaction();
3.使用JUnit 4進行單元測試時,測試程式一直執行不起來,報method initializationerror not found錯誤
網上說版本不對,我試了試,還是有這個問題,後來才知道,缺少了jar包,除了引入junit-4.12.jar之外,還要引入2個依賴jar包:hamcrest-core-1.3.rc2.jar,hamcrest-library-1.3.rc2.jar.junit和hamcrest是兩個不同的框架,不同的東西。只不過是junit使用了hamcrest框架而已。
4、hibernate xml文件要弄自動提醒需要怎麼弄
找到hibernate 檔案下的hibernate-mapping-3.0.dtd 檔案。
eclipse -> Window -> Preferences -> Weband XML -> XML Catalog,選擇 XML CatalogEntries 的 Add... 按鈕,在彈出的 AddXML Catalog Entry 對話方塊裡,Location 裡選擇第二步裡得到的 hibernate-mapping-3.0.dtd,Key Type 選擇 URI,Key 裡輸入第一步裡得到的
http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd。
OK。
再開啟 eclipse 中的 *.hbm.xml 檔案,編輯時就可以像 myeclipse 中那樣擁有自動提示功能了。
5、導進來的專案沒有錯卻有小紅叉消除方法
1.匯入專案之前,請確認工作空間編碼已設定為utf-8:window->Preferences->General->Wrokspace->Text file encoding->Other 選擇UTF-8。
2.匯入後,由於你的開發環境中JRE以及Tomcat Library名稱可能和原始碼中的不一致,可能會出現Build Path的錯誤,解決方法如下:右鍵project->Build Path->Configure Build Path->選擇Libraries tab頁->刪除帶小紅叉的Library->點選Add Library->選擇JRE System Library(刪了Tomcat Library的話就選擇Server Runtime)->選擇一個JRE後->Finish。
如果依然報錯。就需要改當前專案的一個配置就可以了。進入專案包下的.settings目錄,找到org.eclipse.wst.common.project.facet.core.xml檔案,用記事本開啟後才發現這句話有問題:《runtime name="Apache Tomcat v6.0"/》。我eclipse中設定的tomcat是7.0版本的,而它的執行環境是6.0版本的tomcat,肯定會出現問題。於是把這句話刪掉就行了。