Hibernate 双向一对多的关联问题,在线等啊
我现在有两张表,一个employee,一张evaluate,其中employee的emp_id是evaluate的外键,代码及配置文件如下:employee.java
package com.yinhai.giuzhou.employee.demo;
import com.yinhai.giuzhou.evaluate.demo.Evaluate;
public class Employee {
private int emp_id;
private String emp_name;
private String emp_sex;
private String emp_birth;
private String emp_job;
private String emp_office_tel;
private String emp_note;
private String emp_pic;
private int emp_login;
private String emp_pwd;
private String login_name;
private Evaluate evaluate;
public void setEvaluate(Evaluate evaluate) {
this.evaluate = evaluate;
}
public Evaluate getEvaluate() {
return evaluate;
}
public int getEmp_id() {
return emp_id;
}
public void setEmp_id(int empId) {
emp_id = empId;
}
public String getEmp_name() {
return emp_name;
}
public void setEmp_name(String empName) {
emp_name = empName;
}
public String getEmp_sex() {
return emp_sex;
}
public void setEmp_sex(String empSex) {
emp_sex = empSex;
}
public String getEmp_birth() {
return emp_birth;
}
public void setEmp_birth(String empBirth) {
emp_birth = empBirth;
}
public String getEmp_job() {
return emp_job;
}
public void setEmp_job(String empJob) {
emp_job = empJob;
}
public String getEmp_office_tel() {
return emp_office_tel;
}
public void setEmp_office_tel(String empOfficeTel) {
emp_office_tel = empOfficeTel;
}
public String getEmp_note() {
return emp_note;
}
public void setEmp_note(String empNote) {
emp_note = empNote;
}
public String getEmp_pic() {
return emp_pic;
}
public void setEmp_pic(String empPic) {
emp_pic = empPic;
}
public int getEmp_login() {
return emp_login;
}
public void setEmp_login(int empLogin) {
emp_login = empLogin;
}
public String getEmp_pwd() {
return emp_pwd;
}
public void setEmp_pwd(String empPwd) {
emp_pwd = empPwd;
}
public String getLogin_name() {
return login_name;
}
public void setLogin_name(String loginName) {
login_name = loginName;
}
}
evaluate.java:
package com.yinhai.giuzhou.evaluate.demo;
import java.util.Date;
import com.yinhai.giuzhou.employee.demo.Employee;
public class Evaluate {
private int evaluate_id;
private Date evaluate_time;
private String evaluate_result;
private Employee employee;
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public int getEvaluate_id() {
return evaluate_id;
}
public void setEvaluate_id(int evaluateId) {
evaluate_id = evaluateId;
}
public Date getEvaluate_time() {
return evaluate_time;
}
public void setEvaluate_time(Date evaluateTime) {
evaluate_time = evaluateTime;
}
public String getEvaluate_result() {
return evaluate_result;
}
public void setEvaluate_result(String evaluateResult) {
evaluate_result = evaluateResult;
}
}
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.yinhai.giuzhou.employee.demo.Employee" table="employee" schema="dbo" catalog="gzzw">
<!-- 复合主键配置 其中两个key-property,分别对应两个主键-->
<id name="emp_id" type="java.lang.Integer" >
<column name="emp_id" />
<generator class="identity" />
</id>
<set name="evaluate" inverse="true" table="evaluate"
lazy="false">
<key>
<column name="emp_id"></column>
</key>
<one-to-many class="com.yinhai.giuzhou.evaluate.demo.Evaluate"/>
</set>
<property name="emp_name" type="string" column="emp_name"></property>
<property name="emp_sex" type="string" column="emp_sex"></property>
<property name="emp_birth" type="string" column="emp_birth"></property>
<property name="emp_job" type="string" column="emp_job"></property>
<property name="emp_office_tel" type="string" column="emp_office_tel"></property>
<property name="emp_note" type="string" column="emp_note"></property>
<property name="emp_pic" type="string" column="emp_pic"></property>
<property name="emp_login" type="java.lang.Integer" column="emp_login"></property>
<property name="emp_pwd" type="string" column="emp_pwd"></property>
<property name="login_name" type="string" column="login_name"></property>
</class>
</hibernate-mapping>
Evaluate.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.yinhai.giuzhou.evaluate.demo.Evaluate" catalog="gzzw" schema="dbo" table="evaluate">
<id name="evaluate_id" column="evaluate_id" type="java.lang.Integer">
<generator class="identity"></generator>
</id>
<many-to-one name="employee" class="com.yinhai.giuzhou.employee.demo.Employee"
outer-join="auto" cascade="none" access="property" not-null="true">
<column name="emp_id"></column>
</many-to-one>
<property name="evaluate_time" type="java.util.Date" column="evaluate_time"></property>
<property name="evaluate_result" type="string" column="evaluate_result"></property>
</class>
</hibernate-mapping>
报错如下:IllegalArgumentException occurred while calling setter of com.yinhai.giuzhou.employee.demo.Employee.evaluate 请教大虾啊
[解决办法]
把Employee中的evaluate变量改为Set<Evaluate>类型,不是一对多吗!!!!
------解决方案--------------------
private Evaluate evaluate
一对多怎么能这样写呢!!
应该设置一个Set。
private Set<Evaluate> = new HashSet<Evaluate>();
getter/setter
这样才能将一对多的关系映射。
[解决办法]
private Evaluate evaluate;
一对多应该是这样private Set<Evaluate> evaluate;