Hibernate中常見的異常總結

本文總結Hibernate中常見的異常

1. net.sf.hibernate.MappingException
       當出現net.sf.hibernate.MappingException: Error reading resource:…異常時一般是因爲映射文件出現錯誤。

       當出現net.sf.hibernate.MappingException: Resource: … not found是因爲XML配置文件沒找到所致,有可能是放置目錄不正確,或者沒將其加入hibernate.cfg.xml中。

2. net.sf.hibernate.PropertyNotFoundException
       當出現net.sf.hibernate.PropertyNotFoundException: Could not find asetter for property name in class …時,原因一般是因爲XML映射文件中的屬性與對應的Java類中的屬性的getter或setter方法不一致。

3. org.hibernate.id.IdentifierGenerationException
       當出現org.hibernate.id.IdentifierGenerationException: ids for thisclass must be manually assigned before calling save():異常時,一般是因爲<id>元素配置不正確,<id>元素缺少其子元素<generator></generator>的配置引起。

       解決方案:<id>元素映射了相應數據庫表的主鍵字段,對其子元素<generatorclass="">,其中class的取值可以爲increment、identity、sequence、hilo、native……等,更多的可參考hibernate參考文檔,一般取其值爲native 。

4. a different object with the same identifier value was already associatedwith the session

       當出現a different object with the same identifier value was already associated with the session時,一般是因爲在hibernate中同一個session裏面有了兩個相同標識但是是不同實體。

       有如下幾種解決方案:

(1)使用session.clean(),如果在clean操作後面又進行了saveOrUpdate(object)等改變數據狀態的操作,有可能會報出"Found two representations of same collection"異常。

(2)使用session.refresh(object),當object不是數據庫中已有數據的對象的時候,不能使用session.refresh(object)因爲該方法是從hibernate的session中去重新取

object,如果session中沒有這個對象,則會報錯所以當你使用saveOrUpdate(object)

之前還需要判斷一下。

(3)session.merge(object),Hibernate裏面自帶的方法,推薦使用。

5. SQL Grammer Exception,Could not execute JDBC batch update
       當出現SQL Grammer Exception,Could not execute JDBC batch update異常時,一般是由如下問題引起:

(1)SQL語句中存在語法錯誤或是傳入的數據有誤;

(2)數據庫的配置不合法,或者說是配置有誤。較容易出現的有數據表的映射文件(,hbm.xml文件)配置有誤;Hibernate.cfg.xml文件配置有誤;

(3) 當前的數據庫用戶權限不足,不能操作數據庫。以是以Oracle 數據庫爲例,這種情況下在錯誤提示中會顯示java.sql.BatchUpdateException: ORA-01031:insufficient privileges這樣的信息。

       針對上面的各種原因,開發人員可以找出對應的解決方案。

(本文出自Eric's BLOG,轉載時請註明出處)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章