hibernate多对多的配法(xml文件)

来源:互联网 发布:怎样在淘宝里开网店 编辑:程序博客网 时间:2024/06/18 04:32

hibernate的多对多是用一个中间表 来实现的,也就是两个多对一,来实现多对多,配置的时候有两种配法,第一种就是直接把中间表省略,就配两个表,第二种是配置三个表,因为两个表容易配置,且易懂,所以市面上大部分都是用的两个表来配置,这里只写两个的配置方法(省略中间表)

角色和权限的多对多关系

角色表实体bean:

package com.sxt.beans;import java.util.HashSet;import java.util.Set;/** * TRole entity. @author MyEclipse Persistence Tools *///角色表//和权限表是多对多 的关系public class Role implements java.io.Serializable {    private Integer roleld;    private String roleName;    //因为是多对多关系,所以角色表要有一个权限表的集合    private Set<Right> rights = new HashSet<Right>();    public Integer getRoleld() {        return roleld;    }    public void setRoleld(Integer roleld) {        this.roleld = roleld;    }    public String getRoleName() {        return roleName;    }    public void setRoleName(String roleName) {        this.roleName = roleName;    }    public Set<Right> getRights() {        return rights;    }    public void setRights(Set<Right> rights) {        this.rights = rights;    }    public Role() {    }}

权限表实体bean:

package com.sxt.beans;import java.util.HashSet;import java.util.Set;/** * TRight entity. @author MyEclipse Persistence Tools *///权限表public class Right implements java.io.Serializable {    private Integer rightld;    private String rightName;    //和角色表是多对多的关系,所以这个要配置一个角色表的set集合    private Set<Role> roles = new HashSet<Role>();    public Set<Role> getRoles() {        return roles;    }    public void setRoles(Set<Role> roles) {        this.roles = roles;    }    public Right() {    }    public Integer getRightld() {        return rightld;    }    public void setRightld(Integer rightld) {        this.rightld = rightld;    }    public String getRightName() {        return rightName;    }    public void setRightName(String rightName) {        this.rightName = rightName;    }}

配置角色表的xml:Role.hbm.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- 权限表 --><hibernate-mapping>    <class name="com.sxt.beans.Role" table="t_role">        <id name="roleld">            <generator class="identity"></generator>        </id>        <property name="roleName"></property>        <!-- 和权限表的多对多关系 -->        <!-- rights是这个表中的set集合的名称 table中间表的名称 cascade(可不写,但多对多一般在两个多中要写一个,这样做级联保存的时候更加常用些)是有哪些级联操作,all是全部,save-update是保存和修改(常用),delete是删除  -->        <set name="rights" table="t_role_right" cascade="all">        <!-- 这个实体的自增长id -->            <key column="roleld"></key>            <!-- class所对应的多的bean的地址 column对应的自增长的id -->            <many-to-many class="com.sxt.beans.Right" column="rightld"></many-to-many>        </set>    </class></hibernate-mapping>

配置权限表的xml:Right.hbm.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- 权限表 --><hibernate-mapping>    <class name="com.sxt.beans.Right" table="t_right">        <id name="rightld">            <generator class="identity"></generator>        </id>        <property name="rightName"></property>        <!-- 和角色表的多对多关系 -->        <!-- name这个xml对应的bean里面的设置的角色的集合 table中间表的表名-->        <set name="roles" table="t_role_right">            <!-- column这个xml所对应的bean的表的自增长字段 -->            <key column="rightld"></key>            <!-- class所对应的多的bean的地址 column所对应多的bean的表的自增长id -->            <many-to-many class="com.sxt.beans.Role" column="roleld"></many-to-many>        </set>    </class></hibernate-mapping>

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><!-- 引入头部文件 --><!-- 这个是hibernate的配置文件 --> <!-- 配置会话工厂 --><hibernate-configuration>    <session-factory>        <!-- 驱动名称 下面这个配置的是mysql的 -->        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        <!-- URL -->        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sxt</property>        <!-- 用户名 -->        <property name="hibernate.connection.username">root</property>        <!-- 密码 -->        <property name="hibernate.connection.password">123456</property>        <!--方言:hibernate根据方言类将对象"翻译"成相对于的sql语句,因为每个数据库的sql语句有的不同,所以这边声明用的哪个的数据库的哪个版本,然后会根据你的声明生成对应的sql语句 -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>        <!-- 是否打印生成的sql语句 -->        <property name="hibernate.show_sql">true</property>        <!--引入配置文件-->        <mapping resource="com/sxt/beans/Right.hbm.xml" />        <mapping resource="com/sxt/beans/Role.hbm.xml" />    </session-factory></hibernate-configuration>

这样多对多的xml文件就配置好了