休眠无法解析映射文档

问题描述:

,所以我目前正在对我的毕业设计,我面临着这样的问题:休眠无法解析映射文档

Exception in thread "main" java.lang.ExceptionInInitializerError: Initial SessionFactory failedorg.hibernate.boot.InvalidMappingException: Could not parse mapping document: Beans/Receptions.hbm.xml (RESOURCE) 
at Logic.HibernateSessionFactory.buildSessionFactory(HibernateSessionFactory.java:25) 
at Logic.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:10) 
at Main.main(Main.java:7) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

进程退出代码为1

Receptions.hbm.xml完成​​:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 

    <class name="Beans.Receptions" table="receptions" schema="diplomdb"> 
     <id name="recNum"> 
      <column name="recNum" sql-type="int(11)"/> 
     </id> 
     <property name="docPass"> 
      <column name="docPass" sql-type="int(11)"/> 
     </property> 
     <property name="regNum"> 
      <column name="regNum" sql-type="int(11)"/> 
     </property> 
     <property name="recDate"> 
      <column name="recDate" sql-type="date"/> 
     </property> 
    </class> 
</hibernate-mapping> 

Receptions.java:

package Beans; 

import javax.persistence.Basic; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import java.sql.Date; 

@Entity 
public class Receptions { 
    private int recNum; 
    private int docPass; 
    private int regNum; 
    private Date recDate; 

    @Id 
    @Column(name = "recNum", nullable = false) 
    public int getRecNum() { 
     return recNum; 
    } 

    public void setRecNum(int recNum) { 
     this.recNum = recNum; 
    } 

    @Basic 
    @Column(name = "docPass", nullable = false) 
    public int getDocPass() { 
     return docPass; 
    } 

    public void setDocPass(int docPass) { 
     this.docPass = docPass; 
    } 

    @Basic 
    @Column(name = "regNum", nullable = false) 
    public int getRegNum() { 
     return regNum; 
    } 

    public void setRegNum(int regNum) { 
     this.regNum = regNum; 
    } 

    @Basic 
    @Column(name = "recDate", nullable = false) 
    public Date getRecDate() { 
     return recDate; 
    } 

    public void setRecDate(Date recDate) { 
     this.recDate = recDate; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     Receptions that = (Receptions) o; 

     if (recNum != that.recNum) return false; 
     if (docPass != that.docPass) return false; 
     if (regNum != that.regNum) return false; 
     if (recDate != null ? !recDate.equals(that.recDate) : that.recDate != null) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = recNum; 
     result = 31 * result + docPass; 
     result = 31 * result + regNum; 
     result = 31 * result + (recDate != null ? recDate.hashCode() : 0); 
     return result; 
    } 
} 

POJO类和映射文件由IDEA生成,但它一直说它不能解析文件。 我的项目结构看起来像this

你能给我一些提示吗?我不明白它有什么问题,映射文件对我来说看起来很好

+0

为什么你有注释和'hbm'文件?尝试从课程中移除注释。 Hibernate文档说 - '您可以将带注释的持久类和经典的hbm.cfg.xml声明与同一个SessionFactory混合使用。但是,您可以不多次声明一个类(无论是注释还是通过hbm.xml)。您不能在实体层次结构中混合使用配置策略(hbm vs annotations).'可能这就是 – StanislavL

在这个设置中,有两件事对我来说很奇怪: a)为什么你有映射xml和注释映射实体?似乎多余/不正确。新版本的hibernate倾向于消除对xml配置文件的需求。

b)在你的xml中,这个“class name =”Beans.Receptions“看起来不正确,如果hbm文件在包内部,它不应该需要前缀,我会尝试使用” class name =“Receptions”

+0

的原因a)正如我所说,所有这些文件都是由IDEA生成的,我希望将它们保留原样。 b)尝试了这个,但是一旦我从名字中删除了Beans,整个文本就变成了红色,表示无法解析类名 – AdmiralBanger