例如員工跟部門,
多個員工屬於同一個部門,一個部門有許多員工,
如下圖:
接著我們來看兩個物件的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



沒有留言:
張貼留言