`
proTecJavaChen
  • 浏览: 13486 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

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

阅读更多
今天整合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中这样配置的
	<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的。
但是我的测试类是这样写的
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吧
分享到:
评论
1 楼 liuxiuhao 2014-09-04  
Jboss下,部署两个以上项目出现这个问题,解决方法:
1.删除jboss-4.2.3.GA\server\default\lib下的
hibernate3.jar
hibernate-annotations.jar
hibernate-entitymanager.jar


2.jboss-4.2.3.GA\server\default\deploy\jboss-web.deployer\META-INF
下面的
jboss-service.xml
中属性值 true改为false
<attribute name="UseJBossWebLoader">false</attribute>

相关推荐

Global site tag (gtag.js) - Google Analytics