Hibernate中常见的异常
生活随笔
收集整理的這篇文章主要介紹了
Hibernate中常见的异常
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. net.sf.hibernate.MappingException?????? 當(dāng)出現(xiàn)net.sf.hibernate.MappingException: Error reading resource:…異常時一般是因為映射文件出現(xiàn)錯誤。
?????? 當(dāng)出現(xiàn)net.sf.hibernate.MappingException: Resource: … not found是因為XML配置文件沒找到所致,有可能是放置目錄不正確,或者沒將其加入hibernate.cfg.xml中。
2. net.sf.hibernate.PropertyNotFoundException?????? 當(dāng)出現(xiàn)net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class …時,原因一般是因為XML映射文件中的屬性與對應(yīng)的Java類中的屬性的getter或setter方法不一致。
3. org.hibernate.id.IdentifierGenerationException?????? 當(dāng)出現(xiàn)org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():異常時,一般是因為<id>元素配置不正確,<id>元素缺少其子元素<generator></generator>的配置引起。
?????? 解決方案:<id>元素映射了相應(yīng)數(shù)據(jù)庫表的主鍵字段,對其子元素<generator class="">,其中class的取值可以為increment、identity、sequence、hilo、native……等,更多的可參考hibernate參考文檔,一般取其值為native 。具體可參考2.2.2.1小節(jié)。
4. a different object with the same identifier value was already associated with the session?????? 當(dāng)出現(xiàn)a different object with the same identifier value was already associated with the session時,一般是因為在hibernate中同一個session里面有了兩個相同標(biāo)識但是是不同實體。
?????? 有如下幾種解決方案:
(1)使用session.clean(),如果在clean操作后面又進行了saveOrUpdate(object)等改變數(shù)據(jù)狀態(tài)的操作,有可能會報出"Found two representations of same collection"異常。
(2)使用session.refresh(object),當(dāng)object不是數(shù)據(jù)庫中已有數(shù)據(jù)的對象的時候,不能使用session.refresh(object)因為該方法是從hibernate的session中去重新取object,如果session中沒有這個對象,則會報錯所以當(dāng)你使用saveOrUpdate(object)之前還需要判斷一下。
(3)session.merge(object),Hibernate里面自帶的方法,推薦使用。
5. SQL Grammer Exception,Could not execute JDBC batch update?????? 當(dāng)出現(xiàn)SQL Grammer Exception,Could not execute JDBC batch update異常時,一般是由如下問題引起:
(1)SQL語句中存在語法錯誤或是傳入的數(shù)據(jù)有誤;
(2)數(shù)據(jù)庫的配置不合法,或者說是配置有誤。較容易出現(xiàn)的有數(shù)據(jù)表的映射文件(,hbm.xml文件)配置有誤;Hibernate.cfg.xml文件配置有誤;
(3) 當(dāng)前的數(shù)據(jù)庫用戶權(quán)限不足,不能操作數(shù)據(jù)庫。以是以O(shè)racle 數(shù)據(jù)庫為例,這種情況下在錯誤提示中會顯示java.sql.BatchUpdateException: ORA-01031: insufficient privileges這樣的信息。
?????? 針對上面的各種原因,開發(fā)人員可以找出對應(yīng)的解決方案。
?????? 當(dāng)出現(xiàn)net.sf.hibernate.MappingException: Resource: … not found是因為XML配置文件沒找到所致,有可能是放置目錄不正確,或者沒將其加入hibernate.cfg.xml中。
2. net.sf.hibernate.PropertyNotFoundException?????? 當(dāng)出現(xiàn)net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class …時,原因一般是因為XML映射文件中的屬性與對應(yīng)的Java類中的屬性的getter或setter方法不一致。
3. org.hibernate.id.IdentifierGenerationException?????? 當(dāng)出現(xiàn)org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():異常時,一般是因為<id>元素配置不正確,<id>元素缺少其子元素<generator></generator>的配置引起。
?????? 解決方案:<id>元素映射了相應(yīng)數(shù)據(jù)庫表的主鍵字段,對其子元素<generator class="">,其中class的取值可以為increment、identity、sequence、hilo、native……等,更多的可參考hibernate參考文檔,一般取其值為native 。具體可參考2.2.2.1小節(jié)。
4. a different object with the same identifier value was already associated with the session?????? 當(dāng)出現(xiàn)a different object with the same identifier value was already associated with the session時,一般是因為在hibernate中同一個session里面有了兩個相同標(biāo)識但是是不同實體。
?????? 有如下幾種解決方案:
(1)使用session.clean(),如果在clean操作后面又進行了saveOrUpdate(object)等改變數(shù)據(jù)狀態(tài)的操作,有可能會報出"Found two representations of same collection"異常。
(2)使用session.refresh(object),當(dāng)object不是數(shù)據(jù)庫中已有數(shù)據(jù)的對象的時候,不能使用session.refresh(object)因為該方法是從hibernate的session中去重新取object,如果session中沒有這個對象,則會報錯所以當(dāng)你使用saveOrUpdate(object)之前還需要判斷一下。
(3)session.merge(object),Hibernate里面自帶的方法,推薦使用。
5. SQL Grammer Exception,Could not execute JDBC batch update?????? 當(dāng)出現(xiàn)SQL Grammer Exception,Could not execute JDBC batch update異常時,一般是由如下問題引起:
(1)SQL語句中存在語法錯誤或是傳入的數(shù)據(jù)有誤;
(2)數(shù)據(jù)庫的配置不合法,或者說是配置有誤。較容易出現(xiàn)的有數(shù)據(jù)表的映射文件(,hbm.xml文件)配置有誤;Hibernate.cfg.xml文件配置有誤;
(3) 當(dāng)前的數(shù)據(jù)庫用戶權(quán)限不足,不能操作數(shù)據(jù)庫。以是以O(shè)racle 數(shù)據(jù)庫為例,這種情況下在錯誤提示中會顯示java.sql.BatchUpdateException: ORA-01031: insufficient privileges這樣的信息。
?????? 針對上面的各種原因,開發(fā)人員可以找出對應(yīng)的解決方案。
總結(jié)
以上是生活随笔為你收集整理的Hibernate中常见的异常的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate-HQL
- 下一篇: Hibernate常见问题集锦