Could not parse mapping document from resource XX.xml 错误! 这是我找到的最符合的结果

今天整合SSH2的时候碰到了个hibernate映射出错了。 
异常如下 
%%%% Error Creating SessionFactory %%%% 
org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/innoact/pojo/User.hbm.xml 
at org.hibernate.cfg.Configuration.addResource(Configuration.java:569) 
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1587) 
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555) 
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534) 
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508) 
at org.hibernate.cfg.Configuration.configure(Configuration.java:1428) 
at com.innoact.util.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:59) 
at com.innoact.util.HibernateSessionFactory.getSession(HibernateSessionFactory.java:43) 
at com.innoact.junit.test.SpringBeanTest.main(SpringBeanTest.java:24) 
Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.innoact.pojo.User at org.hibernate.cfg.Mappings.addClass(Mappings.java:118) 
at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:145) 
at org.hibernate.cfg.Configuration.add(Configuration.java:669) 
at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:504) 
at org.hibernate.cfg.Configuration.addResource(Configuration.java:566) 
... 8 more 
关键是这一句 
Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping com.innoact.pojo.User我想很多人也遇到过吧,出现这个问题有很多原因,但是异常就是告诉pojo类映射文件重复了。我是在spring中这样配置的 
Xml代码 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
    <property name="dataSource" ref="dataSource"></property>  
<property name="configLocation">    
        <value>classpath:hibernate.cfg.xml</value>    
  </property>    

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<property name="dataSource" ref="dataSource"></property> 
<property name="configLocation"> 
        <value>classpath:hibernate.cfg.xml</value> 
  </property>  

因为hibernate映射实体类会很多,所以就单独写了个hibernate.cfg.xml文件。 
问题的关键就在这里。导入hibernate包的时候MyEclipse会自动生成一个HibernateSessionFactroy类,对吧? 
很多人都是直接通过HibernateSessionFactory.getSession()获取session的。 
但是我的测试类是这样写的 
Java代码 
public class SpringBeanTest{   
    public static void main(String args[]){   
        ApplicationContext ac= new ClassPathXmlApplicationContext("file:WebRoot\\WEB-INF\\applicationContext.xml");   
        Session session=HibernateSessionFactory.getSession();  

public class SpringBeanTest{ 
public static void main(String args[]){ 
ApplicationContext ac= new ClassPathXmlApplicationContext("file:WebRoot\\WEB-INF\\applicationContext.xml"); 
Session session=HibernateSessionFactory.getSession(); 

首先读取spring的配置文件,然后通过HibernateSessionFactory获取Session。但是我们都忘了,spring当中有引用hibernate.cfg.xml而且HibernateSessionFactory也会从hibernate.cfg.xml相关配置信息。所以导致hibernate对实体类映射配置重复。才会出现 
Duplicate class/entity异常。 
虽然不一定所有报这个异常是因为这个原因,但是还是肯定会有人会因为这个而摸不找头脑。这个问题我可弄了一天,吃饭中无意发觉。希望对新手们有帮助。看来以后还是要多细心啊! 
最后说一下,解决办法就是不要通过HibernateSessionFactory获取Session,具体的有几种方法,我就不多说了,自己去Google吧

 

原文出处:http://www.iteye.com/topic/759469  让我们感谢作者。

posted on 2014-02-15 18:11  0101的田野山居  阅读(1694)  评论(0编辑  收藏  举报

导航