Hibernate笔记 5:实体关联关系:多对多

来自Wikioe
跳到导航 跳到搜索


关于

“多对多”的关系,同样可分为“单项关联”、“双向关联”。
  1. 单项关联
    class A{
    	...
    	Set<B> bs;
    }
    
    class B{
    	...
    }
    
    class A{
    	...
    }
    
    class B{
    	...
    	Set<A> as;
    }
    
  2. 双向关联:(常用)
    class A{
    	...
    	Set<B> bs;
    }
    
    class B{
    	...
    	Set<A> as;
    }
    


无论其采用何种方式维护关联关系,其数据库中表关系是一定的。

Hibernate:实体关系:多对多.png

关系维护

以“用户”(User)与“角色”(Role)为例:

  1. 一个用户可以有多个角色;
  2. 一个角色可以指定给多个用户;

单向关联

多对多关系的“单向关联”,即在任意一方维护关联关系即可。

而较多使用的是“双向关联”。

双向关联

示例:

  1. 在“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>
    
  2. 在“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>