Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity HibernateJavaSpringXMLMyeclipse
程序员文章站
2024-02-16 19:47:28
...
今天整合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中这样配置的
因为hibernate映射实体类会很多,所以就单独写了个hibernate.cfg.xml文件。
问题的关键就在这里。导入hibernate包的时候MyEclipse会自动生成一个HibernateSessionFactroy类,对吧?
很多人都是直接通过HibernateSessionFactory.getSession()获取session的。
但是我的测试类是这样写的
首先读取spring的配置文件,然后通过HibernateSessionFactory获取Session。但是我们都忘了,spring当中有引用hibernate.cfg.xml而且HibernateSessionFactory也会从hibernate.cfg.xml相关配置信息。所以导致hibernate对实体类映射配置重复。才会出现
Duplicate class/entity异常。
虽然不一定所有报这个异常是因为这个原因,但是还是肯定会有人会因为这个而摸不找头脑。这个问题我可弄了一天,吃饭中无意发觉。希望对新手们有帮助。看来以后还是要多细心啊!
最后说一下,解决办法就是不要通过HibernateSessionFactory获取Session,具体的有几种方法,我就不多说了,自己去Google吧
异常如下
%%%% 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吧