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)
谢谢大侠,高手指教啊!