休眠无法解析映射文档
问题描述:
,所以我目前正在对我的毕业设计,我面临着这样的问题:休眠无法解析映射文档
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
你能给我一些提示吗?我不明白它有什么问题,映射文件对我来说看起来很好
答
在这个设置中,有两件事对我来说很奇怪: a)为什么你有映射xml和注释映射实体?似乎多余/不正确。新版本的hibernate倾向于消除对xml配置文件的需求。
b)在你的xml中,这个“class name =”Beans.Receptions“看起来不正确,如果hbm文件在包内部,它不应该需要前缀,我会尝试使用” class name =“Receptions”
+0
的原因a)正如我所说,所有这些文件都是由IDEA生成的,我希望将它们保留原样。 b)尝试了这个,但是一旦我从名字中删除了Beans,整个文本就变成了红色,表示无法解析类名 – AdmiralBanger
为什么你有注释和'hbm'文件?尝试从课程中移除注释。 Hibernate文档说 - '您可以将带注释的持久类和经典的hbm.cfg.xml声明与同一个SessionFactory混合使用。但是,您可以不多次声明一个类(无论是注释还是通过hbm.xml)。您不能在实体层次结构中混合使用配置策略(hbm vs annotations).'可能这就是 – StanislavL