Hibernate(十一)多对多双向关联映射

上次我们在中Hibernate从入门到精通(十)多对多单向关联映射讲解了一下多对多单向关联映射,这次我 们讲解一下七种映射中的最后一种多对多双向关联映射。

多对多双向关联映射

按照我们之前的惯例,先看一下相关类图和代码,具体如下:

public class Role {  
    private int id;   
    private String name;      
    private Set users;  
          
    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 getUsers() {  
        return users;  
    }  
    public void setUsers(Set users) {  
        this.users = users;  
    }  
}  
      
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从入门到精通(十)多对多单向关联映射中的多对多单向关 联映射,来具体分析一下多对多双向关联映射,重点体会两者的区别和联系。

多对多双向与多对多单 向关联映射的异同

分析我们上述的类图和代码我们可以看出:单独看多对多双向关联的一端,多对多 双向与多对多单向关联没有根本区别。只是在多对多的两端各有一个集合(Set),它用来存储与之相关的多个对 象。(参考Hibernate从入门到精通(十)多对多单向关联映射)

接下来我们从存储结构上看两者的区别,具 体如下:

从上图可以看出 ,多对多单向与双向的存储结构没有任何区别。接下来我们再来看一下配置信息。具体如下:

<class name="com.zs.hibernate.Role" table="t_role">  
    <id name="id">  
        <generator class="native"/>  
    </id>  
    <property name="name"/>  
    <set name="users" table="t_user_role">  
        <key column="role_id" not-null="true"/>  
        <many-to-many class="com.zs.hibernate.User" column="user_id"/>  
    </set>  
</class>  
      
<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" not-null="true"/>  
        <many-to-many class="com.zs.hibernate.Role" column="role_id" />     
    </set>  
</class>

对比我们之前的博文Hibernate从入门到精通(十)多对多单向关联映射中的多对 多单向映射的配置信息,我们可以看出在单向映射中,只能A->B,不能B->A,所以A与B的关系是不等的 。而在双向关联映射中,既能A->B,也能B->A,所以A与B的关系是等价的。这样也就造成了在双向关联 映射的配置文件的两个类的配置信息基本相同,即A=B。

到此为止我们关于关联映射的所有内容就基本讲完 了,接下来我们会继续讲解一下Hibernate的其他内容,敬请期待!

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