Hibernate中多对一映射问题?

梁林張斌 2010-11-28 09:39:31
大家好,小弟最近正在自学hibernate,在一对多映射的处理中遇到 了问题!我设计的是一个部门对多个员工。javabean和映射文件如下:
Employee.java
package com.howin.beans;

public class Employee {
private int empno;
private String empname;
private Department dep;

public Department getDep() {
return dep;
}

public void setDep(Department dep) {
this.dep = dep;
}

public int getEmpno() {
return empno;
}

public void setEmpno(int empno) {
this.empno = empno;
}

public String getEmpname() {
return empname;
}

public void setEmpname(String empname) {
this.empname = empname;
}

}
Department.java
package com.howin.beans;

import java.util.Set;

//一个部门多个员工,一个员工只能在一个部门

public class Department {
private int depno;
private String depname;
private Set<Employee> se;

public Set<Employee> getSe() {
return se;
}

public void setSe(Set<Employee> se) {
this.se = se;
}

public int getDepno() {
return depno;
}

public void setDepno(int depno) {
this.depno = depno;
}

public String getDepname() {
return depname;
}

public void setDepname(String depname) {
this.depname = depname;
}

}

Employee.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="com.howin.beans.Employee" table="hemployee" catalog="scott">
<id name="empno">
<column name="emp_no"></column>
</id>

<property name="empname" type="string">
<column name="emp_name"></column>
</property>
<many-to-one name="dep" class="Department">
<column name="dep_no"/>
</many-to-one>
</class>

</hibernate-mapping>


Department.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="com.howin.beans.Department" table="hdepartment" catalog="scott">
<id name="depno">
<column name="dep_no"></column>
</id>

<property name="depname">
<column name="dep_name"></column>
</property>

<set name="se">
<key>
<column name="dep_no"></column>
</key>
<one-to-many class="Employee"/>
</set>
</class>

</hibernate-mapping>
我的表字段设计 简单,麻烦各位大侠看看问题在哪?配置文件应该没问题啊!

<?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="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcldb
</property>

<property name="connection.username">scott</property>

<property name="connection.password">tiger</property>


<property name="dialect">
org.hibernate.dialect.OracleDialect
</property>
<property name="show_sql">true</property>
<mapping resource="com/howin/beans/User.hbm.xml" />
<mapping resource="com/howin/beans/Department.hbm.xml" />
<mapping resource="com/howin/beans/Employee.hbm.xml" />
</session-factory>

</hibernate-configuration>

当运行以下类方法时:
package com.howin.dao;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class TestTable {

public static void main(String[] args) {
Configuration cfg = new Configuration().configure();
SchemaExport export = new SchemaExport(cfg);(这是第10行)!!!
export.create(true, true);
}
}
控制台:
Exception in thread "main" org.hibernate.MappingException: Association references unmapped class: Employee
at org.hibernate.cfg.HbmBinder.bindCollectionSecondPass(HbmBinder.java:2377)
at org.hibernate.cfg.HbmBinder$CollectionSecondPass.secondPass(HbmBinder.java:2659)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1136)
at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:762)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:93)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:61)
at com.howin.dao.TestTable.main(TestTable.java:10)


谢谢大侠,高手指教啊!
...全文
50 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
梁林張斌 2010-11-29
  • 打赏
  • 举报
回复
呵呵,对!刚问过老师,一看就这问题!我咋没看出来啊!惭愧!你们一看就到知道病根了!
lyb520320 2010-11-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sunleisoft 的回复:]
在你的Department.hbm.xml文件中,看你这里<one-to-many class= "Employee "/>的class属性值类路径没写完整,
应该写成<one-to-many class= "com.howin.beans.Employee"/>。
还有你的Employee.hbm.xml文件中<many-to-one name= "dep " class= "Departm……
[/Quote]
正解
不善^ 2010-11-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sunleisoft 的回复:]
在你的Department.hbm.xml文件中,看你这里<one-to-many class= "Employee "/>的class属性值类路径没写完整,
应该写成<one-to-many class= "com.howin.beans.Employee"/>。
还有你的Employee.hbm.xml文件中<many-to-one name= "dep " class= "Departm……
[/Quote]

UP

revoinfo 2010-11-28
  • 打赏
  • 举报
回复
在你的Department.hbm.xml文件中,看你这里<one-to-many class= "Employee "/>的class属性值类路径没写完整,
应该写成<one-to-many class= "com.howin.beans.Employee"/>。
还有你的Employee.hbm.xml文件中<many-to-one name= "dep " class= "Department">
也是没写完整。
因为在你的配置文件中你先加载的Department.hbm.xml,所以当执行到这句的时候找不到Employee类,就报了这个错了。

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧