1. 程式人生 > >Hibernate 反向生成檔案報錯解決方法

Hibernate 反向生成檔案報錯解決方法

昨天用myeclipse6.5反向生成hibernate的POJO+*.hbm.xml出現這個錯誤:

……

Association references unmapped class:Appraise

……

昨晚在網上查了半天,沒找到解決方法,很鬱悶於是睡覺去了。今天繼續找原因,終於找到這篇文章了,看了下,我問題的原因基本跟真篇文章描述的八九不離十,照他的辦法,把這個錯誤解決掉了,特意轉這篇文章過來了。

1 開始生成的POJO+*.hbm.xml在工程的default包下,之後被我移到了,yangting.bookshop.model包下了,但我沒有修改對映檔案,於是給我報了以上錯誤.

2          在每個POJO的對映檔案中的<hibernate-mapping package="yangting.bookshop.model">

            applicationContext.xml中的片段:

            <property name="mappingResources">
            <list>
                <value>yangting/bookshop/model/Bbs.hbm.xml</value>
                <value>yangting/bookshop/model/Book.hbm.xml</value>
                <value>yangting/bookshop/model/Manager.hbm.xml</value>
                <value>yangting/bookshop/model/Order.hbm.xml</value>
                <value>yangting/bookshop/model/OrderDetail.hbm.xml</value>
                <value>yangting/bookshop/model/Type.hbm.xml</value>
                <value>yangting/bookshop/model/User.hbm.xml</value>
                <value>yangting/bookshop/model/Appraise.hbm.xml</value>
            </list>
        </property>

3  改了之後,又有點不幸,控制檯又報了個小錯誤 :

嚴重: Exception starting filter Struts2 
Caught exception while loading file struts-default .xml - [unknown location] 
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadConfigurationFiles(XmlConfigurationProvider.java:839)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadDocuments(XmlConfigurationProvider.java:131)
at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:100)     

.....

Caused by: java.lang.ClassCastException: org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration 
at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source) 
at org.apache.xerces.parsers.DOMParser.<init>(Unknown Source)

現在問題都解決了。

 參考文章:

在用myeclipse的Hibernate外掛通過資料表自動生成PO的時候遇到了這樣的錯誤:

Exception in thread "main" org.hibernate.MappingException: Association references unmapped class: User 
    at org.hibernate.cfg.HbmBinder.bindCollectionSecondPass(HbmBinder.java:2380) 
    at org.hibernate.cfg.HbmBinder$CollectionSecondPass.secondPass(HbmBinder.java:2662) 
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286) 
    at free_50.NewsManager.main(NewsManager.java:17)

然後GG和BD了一陣,都沒解決。很煩躁。

之後一個一個檔案去看,最後結合之前手工寫的PO和檢視書籍找到了原因:

因為myeclipse自動生成的*.hbm.xml對映檔案出來問題,在進行<many-to-one>的對映中的class設定有誤,自動生成的對映檔案在這地方只是寫上類名,而實際上要寫上包括包名在內的類名。

 ps:後來發現,原來是我移動了生成後的POJO和對映檔案,但是對映檔案卻沒隨之更改過來,所以要改地址,其實只要改 變<hibernate-mapping package="model.bean">在這裡加入package就OK了,不需要一個個的去改。

只要改過來問題就解決了。

順便把測試程式碼發一下,做個記錄:

Java程式碼
  1. package  SessionFactory;   
  2. import  org.hibernate.Session;   
  3. import  org.hibernate.Transaction;   
  4. import  cn.free_50.model.bean.*;   
  5. public  class  NewsManager {   
  6.     public  static  void  main(String[] args) throws  Exception {   
  7.         //例項化Session   
  8.         Session sess = HibernateSessionFactory.getSession();   
  9.         //開始事務   
  10.         Transaction tc = sess.beginTransaction();   
  11.         User u = new  User();   
  12.         //設定訊息標題和訊息內容   
  13.         u.setUserName("wl" );   
  14.         Group group = new  Group();   
  15.         group.setGroupName("管理員" );   
  16.         group.setGroupDesc("管理論壇事物" );   
  17.         u.setGroup(group);   
  18.         //儲存訊息   
  19.         sess.save(u);   
  20.         //提交事務   
  21.         tc.commit();   
  22.         //關閉Session   
  23.         HibernateSessionFactory.closeSession();   
  24.     }   
原文地址:http://www.free-50.cn/blog/article/technology/Association%20references%20unmapped%20class.htm