您的位置:首页 > 其它

Hibernate 映射多对多关联关系

2017-11-07 21:22 274 查看
第一步首先设计数据库表, 我分别设计的是: 用户表. 角色表 . 关系表

第二步设计实体类:在用户表里面添加一个Set集合代码如下:




 User.hbm.xml

        文件中要使用<many-to-many>标签,并且在标签中添加上对应的列关系,因为你要让两个对象中都要清楚它们之间的映射是如何使用的,并且在生成的关系表中哪一列是对应的自己的外键,所以要在该标签中指明,另外在<set>标签中添加table属性会指明要生成新表,下面的示例中添加了u_r,所以会生成新的关联表。

[html] view
plain copy

<?xml version="1.0"?>  

<!DOCTYPE hibernate-mapping PUBLIC   

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

<hibernate-mapping>  

    <class name="com.src.hibernate.User" table="t_user">  

        <id name="id">  

            <generator class="native"/>  

        </id>  

        <property name="uname"/>  

        <set name="roles" table="u_r">  

            <key column="uid"></key>  

            <many-to-many class="com.src.hibernate.Role" column="rid"></many-to-many>  

        </set>  

    </class>  

</hibernate-mapping>  

 在角色表里面添加一个Set集合代码如下:



Roles.hbm.xml

  因为是单向的关系,所以在该映射文件中就不需要添加多余的标签来维护关系了,它的内部代码也会很简单,对应的映射代码如下:



第三步配置Hibernade.cfg.xml文件



  因为是单向的关系,所以在该映射文件中就不需要添加多余的标签来维护关系了,它的内部代码也会很简单,对应的映射代码如下:

[html] view
plain copy

<?xml version="1.0"?>  

<!DOCTYPE hibernate-mapping PUBLIC   

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

<hibernate-mapping>  

    <class name="com.src.hibernate.Role" table="t_role">  

        <id name="id">  

            <generator class="native"/>  

        </id>  

        <property name="name"/>  

    </class>  

</hibernate-mapping>  

第四步在创建一个page包,一个class测试类里面写测试类内容,我的测试类名是:TestManyToMany





用户表运行结果如下:



  角色表运行结果如下:


     

 关系表运行结果如下:




二、双向多对多

        双向的多对多映射可以看做是单向的一种扩展,它其实是为了设置在两端同时维护关系,从任何一端都能够加载到另一端的内容,在实现上和单向的起始端是相同的都要使用<many-to-many>标签。

        同样以上面的User和Role来做示例,上面的示例中使用了单向的多对多,不同的是这里要使用双向关系,所以要在Role的一端添加同样的映射关系,并在相应的对象中添加集合映射,其中对应的User内的代码不会发生改变。


Roles.hbm.xml

       因为是双向的多对多所以要在对象的两端同时加入双向的集合映射,也就是在配置文件中添加<set>标签,并在标签中添加<many-to-many>标签,具体的配置方法类似于上文的User.hbm.xml的配置方法,如下:

[html] view
plain copy

<?xml version="1.0"?>  

<!DOCTYPE hibernate-mapping PUBLIC   

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

<hibernate-mapping>  

    <class name="com.src.hibernate.Role" table="t_role">  

        <id name="id">  

            <generator class="native"/>  

        </id>  

        <property name="name"/>  

          

        <!-- 添加集合映射,映射的表名应该同User.hbm.xml中配置的表名相同 -->  

        <set name="users" table="u_r">  

            <key column="rid"/><!-- 添加映射的外键 -->  

            <!-- 添加多对多的关系 -->  

            <many-to-many class="com.src.hibernate.User" column="uid"></many-to-many>  

        </set>  

    </class>  

</hibernate-mapping>  


 2.2 Roles.java

    同单向的多对多关系中的文件相同,不过需要在对象中添加集合映射Set,使用set来标明映射的集合,如下代码:

[java] view
plain copy

package com.src.hibernate;  

  

import java.util.Set;  

  

public class Roles
{  

    //id标示  

    private int rid;  

    public int getId() {  

        return id;  

    }  

    public void setId(int id) {  

        this.id = id;  

    }  

      

    //名称  

    private String name;  

    public String getName() {  

        return name;  

    }  

    public void setName(String name) {  

        this.name = name;  

    }  

      

    //用户集合  

    private Set users;  

    public Set getUsers() {  

        return users;  

    }  

    public void setUsers(Set users) {  

        this.users = users;  

    }  

      

}  

       双向关联映射是在单向的关联映射基础上配置而来的,只需要在映射文件的两端同时配置<many-to-many>即可,也就是说Users.hbm.xml和Users.java代码和上文中的代码相同,不发生变化,所以不再重复添加了。

结语:

        完整的单向多对多讨论完整,需要注意的主要是users.hbm.xml中配置的方法,需要使用<many-to-many>标签并且需要生成关系表来维护多对多的关系,其它的内容都是很简单的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: