Hibernate入门之关系篇:多对一和一对多映射

关联关系映射,是对象映射关系中相对复杂的一种,但也是用处最多的一种,因为数据中的表不可能都是单独存在,彼此之间必定存在千丝万缕的联系,这也是关系型数据库的特征所在。同样关联关系的映射,也是对象关系映射中的难点,重点,仔细揣摩,也还是很容易理解掌握的。

上篇博客,从最简单的一对一映射开始最开端。在关系映射里面,使用频率最高的就是,一对多和多对一的关系。本文,介绍简单的一对多和多对一关系的实现。

 

一对多关系的建立:

(1)建立实体类

 

[java][/java] view plaincopy

  1. public class Classes {
  2.         private int id;
  3.         private String name;
  4.         private Set students;
  5.         public int getId() {
  6.             return id;
  7.         }
  8.         public void setId(int id) {
  9.             this.id = id;
  10.         }
  11.         public String getName() {
  12.             return name;
  13.         }
  14.         public void setName(String name) {
  15.             this.name = name;
  16.         }
  17.         public Set getStudents() {
  18.             return students;
  19.         }
  20.         public void setStudents(Set students) {
  21.             this.students = students;
  22.         }
  23.     }
  24.     public class Student {
  25.         private int id;
  26.         private String name;
  27.         private Classes classes;
  28.         public int getId() {
  29.             return id;
  30.         }
  31.         public void setId(int id) {
  32.             this.id = id;
  33.         }
  34.         public String getName() {
  35.             return name;
  36.         }
  37.         public void setName(String name) {
  38.             this.name = name;
  39.         }
  40.         public Classes getClasses() {
  41.             return classes;
  42.         }
  43.         public void setClasses(Classes classes) {
  44.             this.classes = classes;
  45.         }
  46.     }

 

 

(2)建立配置文件:

[html][/html] view plaincopy

  1. <class name=”com.zs.hibernate.Classes” table=”t_classes”>
  2.         <id name=”id”>
  3.             <generator class=”native”/>
  4.         </id>
  5.         <property name=”name”/>
  6.         <set name=”students” inverse=”true”>
  7.             <key column=”classesid”/>
  8.             <one-to-many class=”com.zs.hibernate.Student”/>
  9.         </set>
  10.     </class>
  11.     <class name=”com.zs.hibernate.Student” table=”t_student”>
  12.         <id name=”id”>
  13.             <generator class=”native”/>
  14.         </id>
  15.         <property name=”name”/>
  16.         <many-to-one name=”classes” column=”classesid”/>
  17.     </class>

 

多对一关系:

(1)      建立实体(代码略)

 

(2)      配置文件

[html][/html] view plaincopy

  1. <class name=”com.zs.hibernate.User” table=”t_user”>
  2.         <id name=”id”>
  3.             <generator class=”native”/>
  4.         </id>
  5.         <property name=”name”/>
  6.         <set name=”roles” table=”t_user_role”>
  7.             <key column=”user_id”/>
  8.             <many-to-many class=”com.zs.hibernate.Role” column=”role_id” />
  9.         </set>
  10.     </class>
  11.     <class name=”com.zs.hibernate.Role” table=”t_role”>
  12.         <id name=”id”>
  13.             <generator class=”native”/>
  14.         </id>
  15.         <property name=”name”/>
  16.     </class>

 

(3)      生成表关系

 

其中多对一关系,同一对一映射的外键关联基本上差不多,只是一对一映射,又加入唯一性的约束。

之所以两种关系写在一起,由于两种关系生成的表关系相同,在物理模型方面,维护方式相同。但是从对象方面考虑,一对多关系,是利用set储存多个一的对象,维护的重点在与多的一端,而多对一维护的重点在一的一端

标签