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

文本继续介绍关于Hibernate关系映射:Hibernate处理多对多映射.

首先建立两个多对多关联类

[java][/java] view plaincopy
  1. public class Role {
  2.         private int id;
  3.         private String name;
  4.         public int getId() {
  5.             return id;
  6.         }
  7.         public void setId(int id) {
  8.             this.id = id;
  9.         }
  10.         public String getName() {
  11.             return name;
  12.         }
  13.         public void setName(String name) {
  14.             this.name = name;
  15.         }
  16.     }
  17.     public class User {
  18.         private int id;
  19.         private String name;
  20.         private Set roles;
  21.         public int getId() {
  22.             return id;
  23.         }
  24.         public void setId(int id) {
  25.             this.id = id;
  26.         }
  27.         public String getName() {
  28.             return name;
  29.         }
  30.         public void setName(String name) {
  31.             this.name = name;
  32.         }
  33.         public Set getRoles() {
  34.             return roles;
  35.         }
  36.         public void setRoles(Set roles) {
  37.             this.roles = roles;
  38.         }
  39.     }

相关配置文件

[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>

 

生成表结构

 

上面介绍的是多对多单向映射,如果改为双向映射,首先要修改Role实体类

 

 

[java][/java] view plaincopy
  1.        上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我们讲解一下七种映射中的最后一种多对多双向关联映射。
  2. 多对多双向关联映射
  3. 按照我们之前的惯例,先看一下相关类图和代码,具体如下:
  4.     public class Role {
  5.         private int id;
  6.         private String name;
  7.         private Set users;
  8.         public int getId() {
  9.             return id;
  10.         }
  11.         public void setId(int id) {
  12.             this.id = id;
  13.         }
  14.         public String getName() {
  15.             return name;
  16.         }
  17.         public void setName(String name) {
  18.             this.name = name;
  19.         }
  20.         public Set getUsers() {
  21.             return users;
  22.         }
  23.         public void setUsers(Set users) {
  24.             this.users = users;
  25.         }
  26.     }
  27.     }

 

修改Role实体的配置文件

[html][/html] view plaincopy
  1. <class name=”com.zs.hibernate.Role” table=”t_role”>
  2.         <id name=”id”>
  3.             <generator class=”native”/>
  4.         </id>
  5.         <property name=”name”/>
  6.         <set name=”users” table=”t_user_role”>
  7.             <key column=”role_id” not-null=”true”/>
  8.             <many-to-many class=”com.zs.hibernate.User” column=”user_id”/>
  9.         </set>
  10.     </class>

 

即使进行了上述修改,并没有改变表结构,单向与双向的区别在,在类的维护的方面,Role实体类增加了对Student关系的维护能力。

标签