一:多對一單向關聯
首先我們必須創建兩個實體類
例如:Dept類
public class Dept { private Integer deptNo; private String dName; private String loc; private Set<Employee> emps=new HashSet<Employee>();
Employee類
public class Employee { private Integer empno; private String ename; private Dept dept;
現在我們可以在配置文件裡面配置了
Dept.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.entity"> <class name="Dept" table="Dept"> <id name="deptNo" column="deptNo"> <generator class="native"/> </id> <property name="dName" type="string" column="dName"/> <property name="loc" type="string" column="loc"/> <!--cascade:級聯 inverse:反轉 --> <set name="emps" cascade="save-update" inverse="true" > <key column="deptNo"></key> <!--一對多 --> <one-to-many class="Employee"/> </set> </class> </hibernate-mapping>
Employee.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.entity"> <class name="Employee" table="Employee"> <id name="empno" column="empno"> <generator class="native"/> </id> <property name="ename" type="string" column="ename"/> <!--多對一 --> <many-to-one name="dept" column="deptNo" class="Dept"></many-to-one> <set name="projects" inverse="true" table="proemp"> <key column="rempNo"></key> <many-to-many class="Project" column="rproNo"></many-to-many> </set> </class> </hibernate-mapping>
到這裡,一對多 和多對一的關聯 配置已經完成!!
我們一起來看看測試類
// 添加數據 private static void addDeptAndEmployee() { Session currentSession = HibernateUtil.currentSession(); currentSession.beginTransaction(); Dept dept = new Dept(); //dept.setDeptNo(deptNo) dept.setdName("質管部22"); dept.setLoc("北京22"); Employee emp = new Employee(); emp.setEname("龍龍"); emp.setDept(dept);//建立dept 到employee 對象的 關聯 currentSession.save(emp); currentSession.save(dept); currentSession.getTransaction().commit(); HibernateUtil.closeSessio(); System.out.println("add ok"); }
// 級聯保存 cascade:級聯 private static void addDeptAndEmployeeTocascade() { Session currentSession = HibernateUtil.currentSession(); currentSession.beginTransaction(); Dept dept = new Dept(); // dept.setDeptNo(deptNo) dept.setdName("質管部22"); dept.setLoc("北京22"); Employee emp = new Employee(); emp.setEname("龍龍"); // 建立Dept對象 和Employee 對象的 一對多 雙向關系 emp.setDept(dept); dept.getEmps().add(emp);// currentSession.save(dept); currentSession.getTransaction().commit(); HibernateUtil.closeSessio(); System.out.println("add ok"); }
現在我們開始來看看多對多的關聯
我們還是創建好實體類
例如:
Employee
public class Employee { private Integer empno; private String ename; private Dept dept; private Set<Project> projects=new HashSet<Project>(0);//集合 類 employee的屬性
Project
public class Project { private Integer proNo;//項目的編號 private String proName;//項目名稱 private Set<Employee> employees=new HashSet<Employee>(0);//集合 類 employee的屬性
注意:我還在了Oracle 工具裡面創建了 另外一個表proemp ,即 連接表,你看一下外鍵關系就可以知道了
create table proemp( rproNo number(6), rempNo number(6) ) alter table proemp add constraints FK_rproNo FOREIGN KEY(rproNo) REFERENCES Project(prono) alter table proemp add constraints FK_rempNo FOREIGN KEY(rempNo) REFERENCES employee(empNo)
然後來配置映射文件
單向 多對多關聯
Employee.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.entity"> <class name="Employee" table="Employee"> <id name="empno" column="empno"> <generator class="native"/> </id> <property name="ename" type="string" column="ename"/> <!--多對一 --> <many-to-one name="dept" column="deptNo" class="Dept"></many-to-one> <set name="projects" inverse="true" table="proemp"> <key column="rempNo"></key> <many-to-many class="Project" column="rproNo"></many-to-many> </set> </class> </hibernate-mapping>
雙向 多對多
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.entity"> <class name="Project" table="Project"> <id name="proNo" column="proNo"> <generator class="native"/> </id> <property name="proName" type="string" column="proName"/> <!--配置單向多對多關聯 --> <!-- 映射project 類的employees的屬性 --> <!--cascade="save-update":表名保存或更新project對象時,會級聯保存或更新與它關聯的Employee對象 --> <set name="employees" table="proemp" cascade="save-update"> <key column="rproNo"></key> <many-to-many class="Employee" column="rempNo"></many-to-many> </set> </class> </hibernate-mapping>
我們一起來看看測試類
private static void addProToEmpAndEmpToPro() { Session session = HibernateUtil.currentSession(); session.beginTransaction(); Employee emp=new Employee(); Employee emp2=new Employee(); Project pro=new Project(); Project pro2=new Project(); emp.setEname("李四"); emp2.setEname("張三"); pro.setProName("一號項目"); pro2.setProName("二號項目"); pro.getEmployees().add(emp); pro.getEmployees().add(emp2); emp.getProjects().add(pro); emp.getProjects().add(pro2); pro2.getEmployees().add(emp); emp.getProjects().add(pro2); session.save(pro); session.save(pro2); HibernateUtil.closeSessio(); }
//保存Project 對象的同時還能保存 Employee對象 private static void addProToEmp() { Session session = HibernateUtil.currentSession(); session.beginTransaction(); Employee emp=new Employee(); Employee emp2=new Employee(); Project pro=new Project(); Project pro2=new Project(); emp.setEname("李四"); emp2.setEname("張三"); pro.setProName("一號項目"); pro2.setProName("二號項目"); pro.getEmployees().add(emp); pro.getEmployees().add(emp2); pro2.getEmployees().add(emp); session.save(pro); session.save(pro2); HibernateUtil.closeSessio(); }
就到這裡了,有問題可以在線解答!!!!!!!!!!!!