雙向關聯:
員工知道所屬部門,部門知道包括哪些員工
1. package oneTomany;
3. import java.util.HashSet;
4. import java.util.Set;
6. public class Department {
7. private int id;
8. private String name;
9. private Set<Employee> employees=new HashSet<Employee>();
10. public int getId() {
11. return id;
12. }
13. public void setId(int id) {
14. this.id = id;
15. }
16. public String getName() {
17. return name;
18. }
19. public void setName(String name) {
20. this.name = name;
21. }
22. public Set<Employee> getEmployees() {
23. return employees;
24. }
25. public void setEmployees(Set<Employee> employees) {
26. this.employees = employees;
27. }
28. @Override
29. public String toString() {
30. // TODO Auto-generated method stub
31. return "[Department:id="+id+",]";
32. }
34. }
1. package oneTomany;
3. public class Employee {
4. private int id;
5. private String name;
6. private Department department; // 關聯的對象
7. public int getId() {
8. return id;
9. }
10. public void setId(int id) {
11. this.id = id;
12. }
13. public String getName() {
14. return name;
15. }
16. public void setName(String name) {
17. this.name = name;
18. }
19. public Department getDepartment() {
20. return department;
21. }
22. public void setDepartment(Department department) {
23. this.department = department;
24. }
25. @Override
26. public String toString() {
27. // TODO Auto-generated method stub
28. return "[Employee:id="+id+",]";
29. }
30. }
Department.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="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 語句。
在保存的時候,被依賴的在前邊保存,不被依賴的在後邊保存
1. // 保存
2. session.save(department);
3. session.save(employee1);
4. session.save(employee2);
department 保存後,保存 employee 時就直接保存了外鍵的值,當先保存 employee 是,不知道外鍵的值,多以保存完 depatment 後,再保存外鍵的值。