java 休眠错误:org.hibernate.InvalidMappingException:无法从资源解析映射文档

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16118440/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 21:57:21  来源:igfitidea点击:

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

javahibernate

提问by MindHacks

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();

当我运行项目时,它发生如下异常。在我在 Hibernate 中添加视图表之前,一切都很好,包括 Blame.hbm.xml 和其他。它可以从数据库中读取数据。在 ShowOrderDaoImpl.java 这句话中出现异常: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

我的 hibernate.cfg.xml 文件

<?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

我的 ShowOrderDaoImpl.java 文件

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

我的 Blame.hbm.xml 文件

    <?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>

回答by ssedano

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

看起来还有另一个映射pojo.Blame. 你可能copy/paste犯了一个错误:

<class name="pojo.Blame"

In another hbmfile.

在另一个hbm文件中。

This

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

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

声明当到达一个hbm文件时,它已经有一个名为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"

是错位 <class name="pojo.Blame"

回答by yassine.chaf

be sure that you have overrided the equals/tostring and hash methodes in your Pojo

确保你已经覆盖了 Pojo 中的 equals/tostring 和 hash 方法

回答by Sajith Silva

check why the session=HibernateSessionFactory.getSession(); is getting null. That is the reason for the null pointer

检查为什么 session=HibernateSessionFactory.getSession(); 正在变空。这就是空指针的原因