双向关联:
员工知道所属部门,部门知道包括哪些员工
package oneTomany;
import java.util.HashSet;
import java.util.Set;
public class Department {
private int id;
private String name;
private Set<Employee> employees=new HashSet<Employee>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "[Department:id="+id+",name="+name+"]";
}
}
package oneTomany;
public class Employee {
private int id;
private String name;
private Department department; //关联的对象
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "[Employee:id="+id+",name="+name+"]";
}
}
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
This mapping demonstrates
(1) a table-per-subclass mapping strategy
(2) a simple component mapping
(3) recursive associations withing an inheritance tree
-->
<hibernate-mapping package="oneTomany">
<!--
name:类名
table:表名
-->
<class name="Department" table="t_department">
<id name="id" type="int" column="id" >
<generator class="native"/> <!--表示自动增长-->
</id>
<property name="name" type="string" column="name" />
<!--employees属性 ,表达的是本类与Employee类的一对多的关系-->
<set name="employees" >
<key column="departmentId"></key>
<one-to-many class="Employee"></one-to-many>
</set>
</class>
</hibernate-mapping>
Employee.hbm.xml
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
This mapping demonstrates
(1) a table-per-subclass mapping strategy
(2) a simple component mapping
(3) recursive associations withing an inheritance tree
-->
<hibernate-mapping package="oneTomany">
<!--
name:类名
table:表名
-->
<class name="Employee" table="t_employee">
<id name="id" type="int" column="id" >
<generator class="native"/> <!--表示自动增长-->
</id>
<property name="name" type="string" column="name" />
<!--Department属性,表达的是本类与Department的多对一的关系-->
<many-to-one name="department" class="Department" column="departmentId"></many-to-one>
</class>
</hibernate-mapping>
也可以单向关联,可以让一对多的一方放弃维护关联关系,在set标签中添加属性inverse="true",inverse默认为false,为true时表示由对方维护关联关系,本方不维护。可以减少sql语句。
在保存的时候,被依赖的在前边保存,不被依赖的在后边保存
//保存
session.save(department);
session.save(employee1);
session.save(employee2);
department保存后,保存employee时就直接保存了外键的值,当先保存employee是,不知道外键的值,多以保存完depatment后,再保存外键的值。