org.hibernate.InvalidMappingException:无法从资源* .hbm.xml解析映射文档 [英] org.hibernate.InvalidMappingException: Could not parse mapping document from resource *.hbm.xml

查看:73
本文介绍了org.hibernate.InvalidMappingException:无法从资源* .hbm.xml解析映射文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这个问题已经被问了很多,但我几乎读了其中的每一个,但是他们中没有一个帮助我。
我正在用hibernate编写一个eclipse maven项目,并且出现这个错误:

  org.hibernate。 InvalidMappingException:无法从资源ir / ac / ut / ieproj / da / Student.hbm.xml解析映射文档

我的文件是这样的:



pom.xml

 < project xmlns =http://maven.apache.org/POM/4.0.0xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
xsi: schemaLocation =http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">
< modelVersion> 4.0.0< / modelVersion>

< groupId> ir.ac.ut< / groupId>
< artifactId> ieproj< / artifactId>
< version> 0.2< / version>
<包装>战争< / packaging>

< name> ieproj< / name>
< url> http://maven.apache.org< / url>

<属性>
< project.build.sourceEncoding> UTF-8< /project.build.sourceEncoding>
< / properties>

< build>

<资源>
< resource>
<目录> src / main / java< / directory>
<过滤>真实< /过滤>
< / resource>
< /资源>

< plugins>
< plugin>
< groupId> org.apache.maven.plugins< / groupId>
< artifactId> maven-war-plugin< / artifactId>
< version> 2.0< / version>
< / plugin>
< plugin>

< artifactId> maven-assembly-plugin< / artifactId>
< version> 2.2< / version>
<配置>
< descriptorRefs>
< descriptorRef> jar -with-dependencies< / descriptorRef>
< / descriptorRefs>
< / configuration>
<执行次数>
<执行>
< id> make-assembly< / id>
<阶段>包< /阶段>
<目标>
< goal>单< / goal>
< /目标>
< /执行>
< /执行次数>

< / plugin>
< / plugins>

< / build>

< repositories>
< repository>
< id> JBoss存储库< / id>
< url> http://repository.jboss.org/nexus/content/groups/public/< / url>
< / repository>
< / repositories>

<依赖关系>
< dependency>
< groupId> junit< / groupId>
< artifactId> junit< / artifactId>
< version> 3.8.1< / version>
< scope> test< / scope>
< /依赖关系>
< dependency>
< groupId> ir.ac.ut< / groupId>
< artifactId> iecommon< / artifactId>
< version> 1.0< / version>
< /依赖关系>
< dependency>
< groupId> mysql< / groupId>
< artifactId> mysql-connector-java< / artifactId>
< version> 5.1.24< / version>
< /依赖关系>
< dependency>
< groupId> javax.servlet< / groupId>
< artifactId> servlet-api< / artifactId>
< version> 2.5< / version>
< scope>提供< / scope>
< /依赖关系>
< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-entitymanager< / artifactId>
< version> 3.5.1-最终< / version>
< /依赖关系>
< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-core< / artifactId>
< version> 3.5.1-最终< / version>
< /依赖关系>
< dependency>
< groupId> org.slf4j< / groupId>
< artifactId> slf4j-api< / artifactId>
< version> 1.7.4< / version>
< /依赖关系>
< dependency>
< groupId> dom4j< / groupId>
< artifactId> dom4j< / artifactId>
< version> 1.6.1< / version>
< /依赖关系>
< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate-validator< / artifactId>
< version> 5.0.1.Final< / version>
< /依赖关系>
< dependency>
< groupId> org.hibernate< / groupId>
< artifactId> hibernate< / artifactId>
< version> 3.5.4-最终< / version>
< type> pom< / type>
< /依赖关系>
< dependency>
< groupId> log4j< / groupId>
< artifactId> log4j< / artifactId>
< version> 1.2.17< / version>
< /依赖关系>
< dependency>
< groupId> org.slf4j< / groupId>
< artifactId> slf4j-log4j12< / artifactId>
< version> 1.7.4< / version>
< /依赖关系>

< /依赖关系>

< / project>

hibernate.cfg.xml

 <?xml version ='1.0'encoding ='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC
- // Hibernate / Hibernate配置DTD // 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.url> jdbc:mysql:// localhost:3306 / db< / property>
< property name =hibernate.connection.username>根< / property>
< property name =hibernate.connection.password> 13812002< / property>
< property name =hibernate.connection.pool_size> 10< / property>
< property name =show_sql> true< / property>
< property name =dialect> org.hibernate.dialect.MySQLDialect< / property>
< property name =hibernate.hbm2ddl.auto>更新< / property>
<! - 映射文件 - >
< mapping resource =ir / ac / ut / ieproj / da / Department.hbm.xml/>
< mapping resource =ir / ac / ut / ieproj / da / Studyrec.hbm.xml/>
< mapping resource =ir / ac / ut / ieproj / da / Student.hbm.xml/>
< / session-factory>
< / hibernate-configuration>

Department.hbm.xml

 <?xml version =1.0?> 
<!DOCTYPE hibernate-mapping PUBLIC
- // Hibernate / Hibernate映射DTD 3.0 // EN
http://hibernate.sourceforge.net/hibernate-mapping-3.0 .dtd>
< hibernate-mapping package =ir.ac.ut.ieproj.da>
< class name =DepartmentRepotable =department>
< id name =idtype =intcolumn =ID>
< generator class =assigned/>
< / id>
< property name =namecolumn =Nametype =string/>
< / class>

< sql-query name =getDeptName>
< return alias =Departmentclass =DepartmentRepo/>
<![CDATA [select * from db.department d where d.ID =:id]]>
< / sql-query>

< / hibernate-mapping>

Student.hbm.xml

 <?xml version =1.0?> 
<!DOCTYPE hibernate-mapping PUBLIC
- // Hibernate / Hibernate映射DTD 3.0 // EN
http://hibernate.sourceforge.net/hibernate-mapping-3.0 .dtd>
< hibernate-mapping package =ir.ac.ut.ieproj.da>
< class name =StudentRepotable =student>
< id name =idtype =intcolumn =ID>
< generator class =assigned/>
< / id>
< property name =firstNametype =stringcolumn =FirstName/>
< / property>
< property name =lastNametype =stringcolumn =LastName/>
< / property>
< property name =programtype =stringcolumn =Program/>
< / property>
<多对一
名称=部门
class =DepartmentRepo
cascade =全部
非空=真
column =deptId/>
< / class>

< sql-query name =findStudentId>
< return alias =Studentclass =StudentRepo/>
<![CDATA [select * from db.student s where s.ID =:sid]]>
< / sql-query>

< / hibernate-mapping>

StudentRepo.java

  package ir.ac.ut.ieproj.da; 

导入ir.ac.ut.ieproj.model.Student;

import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class StudentRepo {

private int id;
private String firstName;
private String lastName;
私人字符串程序;
私人DepartmentRepo部门;
$ b $ public Student getStudentbyId(String sid)抛出MappingException,HibernateException,Exception {

Student student = new Student();
会话会话= HibernateUtil.getHibernateSession();
Transaction tx = session.beginTransaction();
Query query = session.getNamedQuery(findStudentId)。setLong(sid,Long.valueOf(sid));
StudentRepo studentRepo =(StudentRepo)query.uniqueResult();
student.setId(studentRepo.getId());
student.setFirstName(studentRepo.getFirstName());
student.setLastName(studentRepo.getLastName());
student.setProgram(Integer.valueOf(studentRepo.getProgram()));
tx.commit();
session.close();

回报学生;

}

public int getId(){
return id;
}

public void setId(int id){
this.id = id;
}

public String getFirstName(){
return firstName;
}

public void setFirstName(String firstName){
this.firstName = firstName;
}

public String getLastName(){
return lastName;
}

public void setLastName(String lastName){
this.lastName = lastName;
}

public String getProgram(){
return program;
}

public void setProgram(String program){
this.program = program;
}

public DepartmentRepo getDept(){
return dept;
}

public void setDept(DepartmentRepo dept){
this.dept = dept;
}

}

DepartmentRepo.java

  package ir.ac.ut.ieproj.da; 

import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import ir.ac.ut.ieproj.model.Department;

public class departmentRepo {

private int id;
私人字符串名称;
$ b公共部门getDeptbyId(String id)抛出MappingException,HibernateException,异常{

Session session = HibernateUtil.getHibernateSession();
Transaction tx = session.beginTransaction();
Query query = session.getNamedQuery(getDeptName)。setLong(id,Integer.valueOf(id));
DepartmentRepo departmentRepo =(DepartmentRepo)query.uniqueResult();
部门部门=新部门();
department.setName(departmentRepo.getName());
tx.commit();
session.close();

return department;

}

public int getId(){
return id;
}

public void setId(int id){
this.id = id;
}

public String getName(){
return name;
}

public void setName(String name){
this.name = name;
}

}

我认为问题出在Student.hbm.xml中的多对一标签,因为Department.hbm.xml和namedQuery内不会导致错误。我究竟做错了什么?我使用mvn包来生成一个.war文件,然后在tomcat 7中进行部署。 $ c>无法解析映射文档是关于您的xml文件 not 格式良好。当出现这个错误时,我们最好仔细检查我们的xml文件,看看它们是否真的好(所有标签都已正确关闭等等)。






就你的情况而言,正如消息所述,你的 Student.hbm.xml 文件是问题所在。您有一些不属于的标签:

 < property name =firstNametype =stringcolumn =FirstName /> 
< / property> < ------------------------------------------------ ------删除此
<属性名称=lastNametype =stringcolumn =LastName/>
< / property> < ------------------------------------------------ ------删除这个
< property name =programtype =stringcolumn =Program/>
< / property> < ------------------------------------------------ ------删除此

那些关闭< / property> 标签不会关闭任何人,因为上面的< property 标签是自封闭的(注意 / > )。


I know this question has been asked a lot, but I read almost every one of them but non of them helped me. I'm writing an eclipse maven project with hibernate and I'm getting this error:

org.hibernate.InvalidMappingException: Could not parse mapping document from resource ir/ac/ut/ieproj/da/Student.hbm.xml

my files are like this:

pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>ir.ac.ut</groupId>
  <artifactId>ieproj</artifactId>
  <version>0.2</version>
  <packaging>war</packaging>

  <name>ieproj</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

<build>

    <resources>
      <resource>
        <directory>src/main/java</directory>
        <filtering>true</filtering>
      </resource>
    </resources>

   <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.0</version>
    </plugin>
    <plugin>

    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>

    </plugin>
   </plugins>

</build>

    <repositories>
        <repository>
            <id>JBoss repository</id>
            <url>http://repository.jboss.org/nexus/content/groups/public/</url>
        </repository>
    </repositories>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>ir.ac.ut</groupId>
        <artifactId>iecommon</artifactId>
        <version>1.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.24</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.5.1-Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.5.1-Final</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.4</version>
    </dependency>
    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate</artifactId>
        <version>3.5.4-Final</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.4</version>
    </dependency>

  </dependencies>

</project>

hibernate.cfg.xml

    <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//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.url">jdbc:mysql://localhost:3306/db</property>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.connection.password">13812002</property>
      <property name="hibernate.connection.pool_size">10</property>
      <property name="show_sql">true</property>
      <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name="hibernate.hbm2ddl.auto">update</property>
      <!-- Mapping files -->
      <mapping resource="ir/ac/ut/ieproj/da/Department.hbm.xml"/>
      <mapping resource="ir/ac/ut/ieproj/da/Studyrec.hbm.xml"/>
      <mapping resource="ir/ac/ut/ieproj/da/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>

Department.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">
<hibernate-mapping package="ir.ac.ut.ieproj.da">
    <class name="DepartmentRepo" table="department">
              <id name="id" type="int" column="ID" >
                <generator class="assigned"/>           
              </id>
              <property name="name" column="Name" type="string"/>
    </class>

    <sql-query name="getDeptName">
        <return alias="Department" class="DepartmentRepo"/>
        <![CDATA[select * from db.department d where d.ID = :id]]>
    </sql-query>

</hibernate-mapping>

Student.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">
<hibernate-mapping package="ir.ac.ut.ieproj.da">
    <class name="StudentRepo" table="student">
              <id name="id" type="int" column="ID" >
                <generator class="assigned"/>           
              </id>
              <property name="firstName" type="string" column="FirstName" />
              </property>
              <property name="lastName" type="string" column="LastName"/>
              </property>
              <property name="program" type="string" column="Program"/>
              </property>
              <many-to-one
                name="dept"
                class="DepartmentRepo"
                cascade="all"
                not-null="true"
                column="deptId"/>
    </class>

    <sql-query name="findStudentId">
        <return alias="Student" class="StudentRepo"/>
        <![CDATA[select * from db.student s where s.ID = :sid]]>
    </sql-query>

</hibernate-mapping>

StudentRepo.java

package ir.ac.ut.ieproj.da;

import ir.ac.ut.ieproj.model.Student;

import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class StudentRepo {

    private int id;
    private String firstName;
    private String lastName;
    private String program;
    private DepartmentRepo dept;

    public Student getStudentbyId (String sid) throws MappingException, HibernateException, Exception {

        Student student = new Student();
        Session session = HibernateUtil.getHibernateSession();
        Transaction tx = session.beginTransaction();
        Query query = session.getNamedQuery("findStudentId").setLong("sid", Long.valueOf(sid));
        StudentRepo studentRepo = (StudentRepo) query.uniqueResult();
        student.setId(studentRepo.getId());
        student.setFirstName(studentRepo.getFirstName());
        student.setLastName(studentRepo.getLastName());
        student.setProgram(Integer.valueOf(studentRepo.getProgram()));
        tx.commit();
        session.close();

        return student;

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getProgram() {
        return program;
    }

    public void setProgram(String program) {
        this.program = program;
    }

    public DepartmentRepo getDept() {
        return dept;
    }

    public void setDept(DepartmentRepo dept) {
        this.dept = dept;
    }

}

DepartmentRepo.java

package ir.ac.ut.ieproj.da;

import org.hibernate.HibernateException;
import org.hibernate.MappingException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import ir.ac.ut.ieproj.model.Department;

public class DepartmentRepo {

    private int id;
    private String name;

    public Department getDeptbyId(String id) throws MappingException, HibernateException, Exception {

        Session session = HibernateUtil.getHibernateSession();
        Transaction tx = session.beginTransaction();
        Query query = session.getNamedQuery("getDeptName").setLong("id", Integer.valueOf(id));
        DepartmentRepo departmentRepo = (DepartmentRepo) query.uniqueResult();
        Department department = new Department();
        department.setName(departmentRepo.getName());
        tx.commit();
        session.close();

        return department;

    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

I think the problem is with the many-to-one tag in Student.hbm.xml because Department.hbm.xml and the namedQuery within are not causing an error. What am I doing wrong? I'm using mvn package to make a .war file and then deploy it in tomcat 7.

解决方案

The error Could not parse mapping document is about your xml files not being well-formed. When this error comes up, we'd better double check our xml files to see if they are really OK (all tags are properly closed and so on).


In your case, as the message states, your Student.hbm.xml file is the problem. You have some tags that do not belong:

<property name="firstName" type="string" column="FirstName" />
</property> <------------------------------------------------------ remove this
<property name="lastName" type="string" column="LastName"/>
</property> <------------------------------------------------------ remove this
<property name="program" type="string" column="Program"/>
</property> <------------------------------------------------------ remove this

Those closing </property> tags aren't closing no one, as the <property tags above them are self-closed (notice the />).

这篇关于org.hibernate.InvalidMappingException:无法从资源* .hbm.xml解析映射文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆