Hibernate常見錯誤整理

常見錯誤:

1.Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence.

如果出現這行錯誤說明你的XML配置文件有不規範的字符,檢查下。

2.net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml

如果出現這行錯誤說明你的hibernate的XML配置文件有錯

3.net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found

如果出現這行錯誤說明hibernate的XML配置文件沒有找到,你應該把XML文件放在與你的類文件同個目錄下,一般跟同名的java持久化類放在一起,也就是跟Hello_Bean.class類文件一起。

4.net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean

如果出現這行錯誤說明你的xml文件裏設置的字段名name的值與Hello_Bean.Java類裏的getXXX或setXXX方法不一致。

5.net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver:沒有找到數據庫驅動程序

6.The database return no natively generate indentity value。主鍵沒有添加增量

7.net.sf.hibernate.PropertyValueException:not-null property references a null or transient value:com.pack.Rordercontent.異常產生原因:Rordercontent對象的非空屬性Rordertable引用了一個臨時對象。

8.net.sf.hibernate.TransientobjectException:objiect references an unsaved transient instance – save the transient instance before flushing: com.pack.Rordertable

持久化對象的某個屬性引用了一個臨時對象Rordertable

9.net.sf.hibernate.MappingException 當出現net.sf.hibernate.MappingException: Error reading resource:…異常時一般是因爲映射文件出現錯誤。 當出現net.sf.hibernate.MappingException: Resource: … not found是因爲XML配置文件沒找到所致,有可能是放置目錄不正確,或者沒將其加入hibernate.cfg.xml中。

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

11. org.hibernate.id.IdentifierGenerationException 當出現org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():異常時,一般是因爲<id>元素配置不正確,<id>元素缺少其子元素<generator></generator>的配置引起。 解決方案:<id>元素映射了相應數據庫表的主鍵字段,對其子元素<generator class="">,其中class的取值可以爲increment、identity、sequence、hilo、native……等,更多的可參考hibernate參考文檔,一般取其值爲native 。具體可參考2.2.2.1小節。

12. a different object with the same identifier value was already associated with 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裏面自帶的方法,推薦使用。

13. 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這樣的信息。

14.net.sf.hibernate.HibernateException:identifier of an instance of my chapter.pack6.Rordertable altered from 1 to 100: 企圖修改處於持久化狀態的對象的OID。修改了處於持久化對象的OID在Session清理緩存時就會拋出此異常(對象處於持久化狀態時。不允許程序隨意修改它的OID。注意:無論java對象處於臨時狀態、持久化狀態還是遊離狀態,應用程序都不應該修改它的OID。因爲,比較安全的做法時,在定義持久化類時,吧他的setId()方法設爲private類型,禁止外部程序訪問該方法)。

15.net.sf.hibernate.MappingException: Unknown entity class:未知的實體類

    Hibernate把持久化類的屬性分爲2種:值(Value)類型和實體(Entity)類型。值類型和實體類型最重要的區別是前者沒有OID,不能被單獨持久化,它的聲明週期依賴於所屬的持久化類的對象的聲明週期,組件類型就是一種值類型;而實體類型有OID,可以被單獨持久化。

16.net.sf.hibernate.QueryException: undefined alias:我猜想出項這種錯誤的原因有很多種:可能是大小寫問題,還有其他很多種可能

17.net.sf.hibernate.NonUniqueResultException:檢索單個對象時,查詢結果包含多個對象,但沒有調用setMaxResult(1)方法

18.net.sf.hibernate.QueryException: Not all named parameters have been set

使用setProperties()方法:用於把命名參數與一個對象的屬性值綁定時,對象中沒有匹配的名字相同的屬性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章