Hibernate Error: org.hibernate.InvalidMappingException: Could not parse mapping document from resource

12,167

Looks like there is another mapping for pojo.Blame. You might had a copy/paste mistake:

<class name="pojo.Blame"

In another hbm file.

This

Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping pojo.Blame

States that when reached a hbm file it already has a definition for a class named pojo.Blame.

Looks like in some of this files:

<mapping resource="pojo/Blame.hbm.xml"/>
<mapping resource="pojo/Buyer.hbm.xml"/>
<mapping resource="pojo/Dispute.hbm.xml"/>
<mapping resource="pojo/Evidence.hbm.xml"/>
<mapping resource="pojo/Goods.hbm.xml"/>
<mapping resource="pojo/Message.hbm.xml"/>
<mapping resource="pojo/Record.hbm.xml"/>
<mapping resource="pojo/Seller.hbm.xml"/>
<mapping resource="pojo/Staff.hbm.xml"/>
<mapping resource="pojo/Trade.hbm.xml"/>
<mapping resource="pojo/Fund.hbm.xml"/>
<mapping resource="pojo/Showorderbybid.hbm.xml"/>

Is a misplaced <class name="pojo.Blame"

Share:
12,167

Related videos on Youtube

MindHacks
Author by

MindHacks

A student majors in IMIS. A big fan of computer programming.

Updated on September 16, 2022

Comments

  • MindHacks
    MindHacks over 1 year

    When I run the project, it occurs an exception as below. Before I add a view table in Hibernate, everyting got well include the Blame.hbm.xml and others. And it could read the data from database. The exception occurs in ShowOrderDaoImpl.java at this sentence: session=HibernateSessionFactory.getSession();

    My exception

        org.hibernate.InvalidMappingException: Could not parse mapping document from resource pojo/Blame.hbm.xml
        at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3415)
        at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXmlQueue(Configuration.java:3404)
        at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3392)
        at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1341)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
        at session.factory.HibernateSessionFactory.rebuildSessionFactory(HibernateSessionFactory.java:75)
        at session.factory.HibernateSessionFactory.getSession(HibernateSessionFactory.java:57)
        at dao.impl.ShowOrderDaoImpl.queryTradesByBid(ShowOrderDaoImpl.java:24)
        at test.testHibernate.main(testHibernate.java:45)
    Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping pojo.Blame
    ok
        at org.hibernate.cfg.Configuration$MappingsImpl.addClass(Configuration.java:2580)
        at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:174)
        at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:3412)
        ... 8 more
    java.lang.NullPointerException
        at dao.impl.ShowOrderDaoImpl.queryTradesByBid(ShowOrderDaoImpl.java:25)
        at test.testHibernate.main(testHibernate.java:45)
    

    my hibernate.cfg.xml file

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                             "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
     <session-factory>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.password">root</property>
      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/disputesystem</property>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name="hibernate.show_sql">true</property>
      <mapping resource="pojo/Blame.hbm.xml"/>
      <mapping resource="pojo/Buyer.hbm.xml"/>
      <mapping resource="pojo/Dispute.hbm.xml"/>
      <mapping resource="pojo/Evidence.hbm.xml"/>
      <mapping resource="pojo/Goods.hbm.xml"/>
      <mapping resource="pojo/Message.hbm.xml"/>
      <mapping resource="pojo/Record.hbm.xml"/>
      <mapping resource="pojo/Seller.hbm.xml"/>
      <mapping resource="pojo/Staff.hbm.xml"/>
      <mapping resource="pojo/Trade.hbm.xml"/>
      <mapping resource="pojo/Fund.hbm.xml"/>
      <mapping resource="pojo/Showorderbybid.hbm.xml"/>
     </session-factory>
    </hibernate-configuration>
    

    my ShowOrderDaoImpl.java file

    package dao.impl;
    
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    
    import pojo.Showorderbybid;
    import session.factory.HibernateSessionFactory;
    import dao.intf.ShowOrderDao;
    
    public class ShowOrderDaoImpl implements ShowOrderDao{
    
        @Override
        public List<Showorderbybid> queryTradesByBid(String bid) throws Exception {
            Session session=null;
            Transaction transaction=null;
            List<Showorderbybid> orders=new ArrayList<Showorderbybid>();
            try {
                session=HibernateSessionFactory.getSession();
                transaction=session.beginTransaction();
                Query query=session.createQuery("from Showorderbybid where bid=?");
                query.setParameter(0, bid);
                orders=(List<Showorderbybid>)query.list();
                List CountView = new ArrayList(); 
                Iterator it = orders.iterator(); 
                while (it.hasNext()) {
                    Object[] all = (Object[]) it.next(); 
                    Showorderbybid countViewId = new Showorderbybid(); 
                    countViewId.setAmount((Integer) all[0]); 
                    countViewId.setBid((String) all[1]); 
                    countViewId.setDetail((String) all[2]); 
                    countViewId.setGid((String)all[3]); 
                    countViewId.setGname((String)all[4]);
                    countViewId.setLogistics((String)all[5]);
                    countViewId.setSid((String)all[6]);
                    countViewId.setSname((String)all[7]);
                    countViewId.setStatus((String)all[8]);
                    countViewId.setTid((String)all[9]);
                    countViewId.setTotalmoney((Integer) all[10]);
                    countViewId.setTradetime((Date)all[11]);
                    orders.add(countViewId);  
                } 
    
            } catch (Exception e) {
                e.printStackTrace(); 
            }finally{
                HibernateSessionFactory.closeSession();
            }
            return orders;
        }
    
    }
    

    my Blame.hbm.xml file

        <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 2013-4-19 23:02:05 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="pojo.Blame" table="blame" catalog="disputesystem">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="identity" />
            </id>
            <many-to-one name="dispute" class="pojo.Dispute" fetch="select">
                <column name="disputeid" length="20" not-null="true" />
            </many-to-one>
            <property name="blametime" type="timestamp">
                <column name="blametime" length="19" not-null="true" />
            </property>
            <property name="content" type="string">
                <column name="content" length="1000" />
            </property>
        </class>
    </hibernate-mapping>
    
  • MindHacks
    MindHacks about 11 years
    You mean where I should paste class name="pojo.Blame" to. Or which sentence should be replaced?
  • Siddharth
    Siddharth about 11 years
    Yeah, this answer seems the most logical Duplicate class/entity mapping pojo.Blame. There is a typo somewhere in some hbm file. You have copy pasted your hbm files and forgotten to change the mapping / table.
  • MindHacks
    MindHacks about 11 years
    Thank you, however I have checked all of my hbm files, there are correct class name as well as its table names. Hence I guess it is not the copy/paste issue. And before I add a view into Hibernate, my project runs well. I guess the problem in the view table "Showorderbybid".
  • MindHacks
    MindHacks about 11 years
    Even I delete <mapping resource="pojo/Blame.hbm.xml" /> from hibernate.cfg.xml. It caused the same issue while the table changed to Buyer.hbm.xml.