Hibernate(十)多对多单向关联映射

上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的 相关内容,这次我们继续多对多单向关联映射。

多对多单向关联映射

在讲解多对多单向关联映 射之前,首先看一下相关类图和代码,具体如下:

public class Role {  
    private int id;   
    private String name;  
          
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
}  
      
public class User {   
    private int id;   
    private String name;  
    private Set roles;  
          
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public Set getRoles() {  
        return roles;  
    }  
    public void setRoles(Set roles) {  
        this.roles = roles;  
    }  
}


多对多单向关联和一对多单向关联的异同

多对多单向关联映射与一对多单向关联映射类似 ,都是在指向端被加载时,将被指向段加载上来,即单向的约束,所不同的是将一对多中一的一端从一变成了 多而已,这点可以从类图上明显看出。但从代码上看一对多和多对多的区别则很难看出两者的区别。(参考 Hibernate从入门到精通(八)一对多单向关联映射)

接下来我们再从存储结构上分析两者的区别和联 系。具体如下:

通过上述表结构 明显可以看出,在多对多关联映射中,存在第三张表,用以维护关联关系两端对象的对应关系,而这在一对多 中则是不存在的。为什么会这样呢?这是因为配置文件的配置不同所导致的这样的映射结果。具体如下:

<class name="com.zs.hibernate.User" table="t_user">  
    <id name="id">  
        <generator class="native"/>  
    </id>  
    <property name="name"/>  
    <set name="roles" table="t_user_role">  
        <key column="user_id"/>  
        <many-to-many class="com.zs.hibernate.Role" column="role_id" />     
    </set>  
</class>  
      
<class name="com.zs.hibernate.Role" table="t_role">  
    <id name="id">  
        <generator class="native"/>  
    </id>  
    <property name="name"/>  
</class>

通过对比上篇文章Hibernate从入门到精通(八)一对多单向关联映射中映射文件可 以看出在一对多单向关联中映射配置的属性为<one-to-many/>,而多对多关联映射中配置的属性为 <many-to-many/>,这就导致了映射的两种不同结果和两种不同的解决方案。

到此为止关于一对多单 向关联映射我们就基本讲完了,下次我们继续讲解关联映射的最后一个内容多对多双向关联映射。

原文地址:https://www.cnblogs.com/duscl/p/4871419.html