例如員工跟部門,
多個員工屬於同一個部門,一個部門有許多員工,
如下圖:
接著我們來看兩個物件的java檔案及配置,
Employee.java
package com.model; public class Employee { private String empNo; private String name; private Dept dept; public String getEmpNo() { return empNo; } public void setEmpNo(String empNo) { this.empNo = empNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Dept getDept() { return dept; } public void setDept(Dept dept) { this.dept = dept; } }
Dept.java
package com.model; public class Dept { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Employee.hbm.xml
<?xml version="1.0"?> <!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.model.Employee" table="employee"> <id name="empNo" type="java.lang.String"> <generator class="assigned" /> </id> <property name="name" type="string"> <column name="name" length="10" not-null="true" /> </property> <many-to-one name="dept" class="com.model.Dept" column="deptId" cascade="all" outer-join="true" /> </class> </hibernate-mapping>
這邊cascade一樣設定為all,
表示多的一方只要有save、update、delete都會連帶到一的一方,
outer-join為true表示在查詢時會直接join一方的table,
Dept.hbm.xml
<?xml version="1.0"?> <!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.model.Dept" table="dept"> <id name="id" type="java.lang.String"> <generator class="assigned" /> </id> <property name="name" type="string"> <column name="name" length="20" not-null="true" /> </property> </class> </hibernate-mapping>
接下來我們撰寫測試程式,
TestEmployeeDept.java
package com.hibernate; import org.hibernate.Session; import org.hibernate.Transaction; import com.hibernate.util.HibernateUtils; import com.model.Dept; import com.model.Employee; public class TestEmployeeDept { public static void main(String[] args) { Session session = HibernateUtils.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); try { Dept dept=new Dept(); dept.setId("H2"); dept.setName("人資服務部"); Employee emp1=new Employee(); emp1.setEmpNo("W1982"); emp1.setName("Water"); emp1.setDept(dept); Employee emp2=new Employee(); emp2.setEmpNo("F2012"); emp2.setName("Jeff"); emp2.setDept(dept); Employee emp3=new Employee(); emp3.setEmpNo("A1023"); emp3.setName("Amber"); emp3.setDept(dept); session.save(emp1); session.save(emp2); session.save(emp3); tx.commit(); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } finally { session.close(); HibernateUtils.shutdown(); } } }
執行之後的console畫面
Hibernate: select dept_.id, dept_.name as name5_ from dept dept_ where dept_.id=?
Hibernate: insert into dept (name, id) values (?, ?)
Hibernate: insert into employee (name, deptId, empNo) values (?, ?, ?)
Hibernate: insert into employee (name, deptId, empNo) values (?, ?, ?)
Hibernate: insert into employee (name, deptId, empNo) values (?, ?, ?)
table employee
table dept
沒有留言:
張貼留言