Hibernate笔记 5:实体关联关系:多对多
跳到导航
跳到搜索
关于
“多对多”的关系,同样可分为“单项关联”、“双向关联”。
- 单项关联:
class A{ ... Set<B> bs; } class B{ ... }
- 或
class A{ ... } class B{ ... Set<A> as; }
- 双向关联:(常用)
class A{ ... Set<B> bs; } class B{ ... Set<A> as; }
无论其采用何种方式维护关联关系,其数据库中表关系是一定的。
关系维护
以“用户”(User)与“角色”(Role)为例:
- 一个用户可以有多个角色;
- 一个角色可以指定给多个用户;
单向关联
多对多关系的“单向关联”,即在任意一方维护关联关系即可。 而较多使用的是“双向关联”。
双向关联
示例:
- 在“User”中:维护其关联的“Role”集合;
public class User{ private Long user_id; private Long user_code; private String user_name; private String user_password; private String user_state; // 用户类中维护角色对象集合 private Set<Role> roles = new HashSet<Role>(); // getter、setter ... }
... <hibernate-mapping> <class name="cn.itcast.hibernate.domain.User" table="sys_user"> <id name= "user_id"> <generator class="native"/> </id> <property name="user_code"/> <property name="user_name"/> <property name="user_password"/> <property name="user_state"/> <!-- 配置关联角色集合 --> <set name="roles" table="sys_user_role"> <key column="user_id"></key> <many-to-many class= "cn.itcast.hibernate.domain.Role" column="role_id"/> </set> </class> </hibernate-mapping>
- 在“Role”中:维护其关联的“User”;
public class Role{ private Long role_id; private String role_name; private String role_mome; // 角色类中维护用户对象集合 private Set<User> users = new HashSet<User>(); // getter、setter ... }
... <hibernate-mapping> <class name="cn.itcast.hibernate.domain.Role" table="sys_role"> <id name= "role_id"> <generator class="native"/> </id> <property name="role_name"/> <property name="role_mome"/> <!-- 配置关联用户集合 --> <set name="roles" table="sys_user_role"> <key column="role_id"></key> <many-to-many class= "cn.itcast.hibernate.domain.User" column="user_id"/> </set> </class> </hibernate-mapping>