论坛首页 入门技术论坛

Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mappi

浏览 6495 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-09-09  
今天整合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吧
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics