2012-07-29 67 views
0

我已經開發了休眠的應用程序下面是POJO的,但我得到的映射例外請指教越來越無效映射異常休眠

這是我個人的POJO ..

package mypack; 

public class Person 
{ 
    private int personId; 
    private String name; 
    private Address address; 
    public Person() 
    { 
     super(); 
    } 
    public Person(String name, Address address) 
    { 
     super(); 
     this.name = name; 
     this.address = address; 
    } 
    public int getPersonId() { 
     return personId; 
    } 
    public void setPersonId(int personId) { 
     this.personId = personId; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public Address getAddress() { 
     return address; 
    } 
    public void setAddress(Address address) { 
     this.address = address; 
    } 
    } 

和地址POJO是

package mypack; 

public class Address 
{ 
    private int id; 
    private String city,state; 

    public Address() 
    { 
     super(); 

    } 

    public Address(String city, String state) 
    { 
     super(); 
     this.city = city; 
     this.state = state; 
    } 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getCity() { 
     return city; 
    } 
    public void setCity(String city) { 
     this.city = city; 
    } 
    public String getState() { 
     return state; 
    } 
    public void setState(String state) { 
     this.state = state; 
    } 
    } 

和相應的HBM映射文件是pkfk.hbm.xml ..

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE hibernate-mapping PUBLIC 
      "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
      "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<!-- Generated by MyEclipse Hibernate Tools.     --> 
<hibernate-mapping> 
<class name="mypack.Person"> 
<id name="personId" type="int"> 
<generator class="increment"/> 
</id> 
<property name="name"/> 
<many-to-one name="address" class="mypack.Address" column="addressId" unique="true" cascade="all"/> 
</class> 


<class name="mypack.Address"> 
<id name="id" column="addressId" type="int"> 
<generator class="increment"/> 
</id> 
<property name="city"/> 
<property name="state"/> 
</class> 
</hibernate-mapping> 

和我的主程序文件是...

package mypack; 

import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.cfg.Configuration; 

public class TestProgram 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
     SessionFactory sesfac=new Configuration().configure().buildSessionFactory(); 
     Session ses=sesfac.openSession(); 
     Person p=new Person("Anupam",new Address("Noida","U.P")); 
     Person p1=new Person("Rekha Singh",new Address("Kanpur","U.P")); 
     System.out.println("Persisting Object..."); 
     Transaction tx=ses.beginTransaction(); 
     ses.save(p); 
     ses.save(p1); 
     tx.commit(); 
     System.out.println("Successfully Persisted."); 
     ses.close(); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e); 
     } 
    } 
} 

在excuting我收到以下錯誤主文件..

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). 
log4j:WARN Please initialize the log4j system properly. 
org.hibernate.InvalidMappingException: Could not parse mapping document from resource samePK.hbm.xml 

請告知什麼是錯的,以及如何糾正這個無效的映射異常

+0

發佈異常的完整堆棧跟蹤。 – 2012-07-29 12:20:03

回答

0

您將文件名爲pkfk.hbm.xml,休眠嘗試讀取samePK.hbm.xml。你的主要配置文件必須是錯誤的。

0

如果有人在使用spring和hibernate集成時遇到無效映射異常,請仔細檢查springbean.xml文件中的拼寫錯誤(無論你給出了什麼),然後仔細檢查hibernate.hbm.xml文件bcs,因爲我認爲大部分時間我們只會導致拼寫錯誤。 1)變量名正確對應於hbm文件; 2)所有的getter/setter都存在或不存在。 3)當你使用加載springbean.xml文件時,ClassPathXmlApplicationContext在構造函數中傳遞,然後檢查它的拼寫名稱。 4)id標籤必須是。它可以輸入字符串或int,長任意一個k

這是我的經驗,我與你分享。我希望這對所有人都有用。