zoukankan      html  css  js  c++  java
  • Hibernate多对多关系映射

     两张表的多对多关系,在数据库中通常是通过第三张中间表来实现的,第三张中间表放的是两张表各自的主键值,通过主键与主键的对应来体现表直接的关系。比如在权限系统中,一个用户可以拥有多种权限,而一种权限也可以授予多个用户。

       在持久化对象设计的时候,角色和用户都分别有一个集合来防止拥有它的用户或角色。角色类的设计:

    public class RolePO {
     private int id;
     
     private String name;
     
     private Set employees = new HashSet();

    ......

    }

    用户类的设计:

    public class EmployeePO {
     private int id;

     private String name;

     private Set roles = new HashSet();

    ......

    }

    映射对象关系映射文件配置如下:

    RolePO.hbm.xml:

    <hibernate-mapping>
     <class name="com.lovo.po.RolePO" table="t_role">
      <id name="id" column="r_id" type="int">
       <generator class="increment"></generator>
      </id>
      <property name="name" column="f_name" type="string"></property>
      <set name="employees" table="mapping" cascade="all" inverse="false">
       <key column="f_r_id"></key>
       <many-to-many class="com.lovo.po.EmployeePO" column="f__e_id"/>
      </set>
     </class>
    </hibernate-mapping>

    EmployeePO.hbm.xml:

    <hibernate-mapping>
     <class name="com.lovo.po.EmployeePO" table="t_employee">
      <id name="id" column="e_id" type="int">
       <generator class="increment"></generator>
      </id>
      <property name="name" column="f_name" type="string"></property>
      <set name="roles" table="mapping" cascade="all" inverse="true">
       <key column="f_e_id"></key>
       <many-to-many class="com.lovo.po.RolePO" column="f_r_id"/>
      </set>
     </class>
    </hibernate-mapping>
    需要注意的是<key>中的column对应的是当前类在中间表中对应的字段,即对方想要的外键,而<many-to-many class="com.lovo.po.RolePO" column="f_roleid"/>中的column指示的是中间表中本类想要的外键。还要注意的是inverse的值只能有一个为true,因为如果双发都为true,那么双发都去维护关系,会造成中间关系表中出现重复的数据。在进行删除的时候Hibernate会删除id所对应的信息和中间关系表中对应的信息,如,删除用户

    如:Hibernate: delete from mapping where f_e_id=?
    Hibernate: delete from employee where e_id=?

  • 相关阅读:
    給COMBOBOX增加VALUE和名称(完全解决)
    api控制系统服务
    .net 函数注析
    电容降压式电源
    光电耦合器的应用
    javascrip判断null和undefined
    光电耦合器
    Windows 系统错误代码
    Request.ServerVariables
    获得操作系统版本
  • 原文地址:https://www.cnblogs.com/LuckyBao/p/5925940.html
Copyright © 2011-2022 走看看