1 一般情况下集合的选择是set,如果想保证顺序就用list,或者用list配置的时候用bag
2 在使用set的时候,hibernate内部会把它转化为PersistSet()。所以我们在声明的时候用的是set接口,而且在以后的使用过程中不能在强制类型转化为HashSet类。
3 在一个类中有另一类,那么我们可以设置cascade,在set这个属性当中配置cascade=“save-update,delete”。但是我们在一对多的关系当中一般都不用配置,因为如果说一个部门删除了,就要把所有的员工都删除么?显然不是。我们一般在一对一的关系(主对象配置级联),和一对多的关系当中设置。但是如果牵扯到delete一定要慎重。
4 一般会让一对多的一方面来放弃对关系的维护,inverse(是否放弃维护关系)
Employee.java
package cn.itcast.domain;
public class Employee {
private int id;
private String name;
private Department depart;
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 getDepart() {
return depart;
}
public void setDepart(Department depart) {
this.depart = depart;
}
}
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 package="cn.itcast.domain">
<class name="Employee">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<many-to-one name="depart" column="depart_id"></many-to-one>
</class>
</hibernate-mapping>
Department.java
package cn.itcast.domain;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Department {
private int id;
private String name;
private Set<Employee> employees;
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
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;
}
}
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 package="cn.itcast.domain">
<class name="Department">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property>
<set name="employees" inverse="true">
<key column="depart_id"></key>
<one-to-many class="Employee"/>
</set>
</class>
</hibernate-mapping>
Many2One.java
package cn.itcast.dao.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.Transaction;
import cn.itcast.dao.HibernateUtil;
import cn.itcast.domain.Department;
import cn.itcast.domain.Employee;
public class Many2One {
/**
* @param args
*/
public static void main(String[] args) {
add();
}
static Employee query(int empId)
{
Session s=null;
Transaction tx=null;
try {
s=HibernateUtil.getSession();
tx=s.beginTransaction();
Employee employee=(Employee) s.get(Employee.class,empId);
tx.commit();
return employee;
} finally {
if (s!=null)
s.close();
}
}
static Department add()
{
Session s=null;
Transaction tx=null;
try {
Department depart =new Department();
depart.setName("depart");
Employee emp1=new Employee();
emp1.setDepart(depart);//建立两个对象之间的关联
emp1.setName("emp1");
Employee emp2=new Employee();
emp2.setDepart(depart);//建立两个对象之间的关联
emp2.setName("emp2");
/*
Set< Employee> employees=new HashSet<Employee>();
employees.add(emp1);
employees.add(emp2);
depart.setEmployees(employees);
*/
s=HibernateUtil.getSession();
tx=s.beginTransaction();
s.save(emp1);
s.save(emp2);
s.save(depart);
tx.commit();
return depart;
} finally {
if (s!=null)
s.close();
}
}
}