分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

hibernate多对多关联映射

发布时间:2023-09-06 01:46责任编辑:彭小芳关键词:暂无标签

映射原理:

  不论是单项关联还是双向关联都是通过第三张表,将两个表中的主键放到第三个表中做一个关联。用第三张表来解决可能会造成数据冗余的问题。

举例:

  一个用户(User)对多个角色(Role),一个角色对多个用户。

分类:

一、单项的多对多关联映射(单向User--->Role)

对象模型

              

关系模型

            

实例

  下面我们看一下实体类和映射文件的代码。

User

public class User { ?????private int id; ?????private String name; ???????????private Set roles; ?????....}

Role

public class Role { ?????private int id; ?????private String name; ?...}

User.hbm.xml

<?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 package="com.liang.hibernate"> ?????<class name="User" table="t_user"> ?????????<id name="id"> ?????????????<generator class="native"></generator> ?????????</id> ?????????<property name="name"></property> ?????????<!-- roles属性,表达的是本对象(User)与Role的多对多的关系 --> ???????????<set name="roles" table="t_user_role"> ?????????????<!--当前表(User)的主键--> ?????????????<key column="user_id"></key> ?????????????<many-to-many class="Role" column="role_id"></many-to-many> ?????????</set> ?????</class> ?</hibernate-mapping> ?

Role.hbm.xml

<?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 package="com.liang.hibernate"> ?????<class name="Role" table="t_role"> ?????????<id name="id"> ?????????????<generator class="native"></generator> ?????????</id> ?????????<property name="name"></property> ?????</class> ?</hibernate-mapping> ?

多对多关联映射,在实体类中,跟一对多关联映射一样,也是用集合来表示的。<set>标签中用table属性重命名中间表名称,<key>标签定义当前表的主键,用<many-to-many>标签来关联另一张表。

二、双向的多对多关联映射(双向User<--->Role)

下面我们看一下实体类和映射文件的代码。

User同上

Role

public class Role { ?????private int id; ?????private String name; ?????private Set users; ?...}

User.hbm.xml

<?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 package="com.liang.hibernate"> ?????<class name="User" table="t_user"> ?????????<id name="id"> ?????????????<generator class="native"></generator> ?????????</id> ?????????<property name="name"></property> ?????????<!-- roles属性,表达的是本对象(User)与Role的多对多的关系 --> ???????????<set name="roles" table="t_user_role"> ?????????????<!--当前表(User)的主键--> ?????????????<key column="user_id"></key> ?????????????<many-to-many class="Role" column="role_id"></many-to-many> ?????????</set> ?????</class> ?</hibernate-mapping>

Role.hbm.xml

<?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 package="com.liang.hibernate"> ?????<class name="Role" table="t_role"> ?????????<id name="id"> ?????????????<generator class="native"></generator> ?????????</id> ?????????<property name="name"></property> ?????????<!-- users属性,表达的是本对象(Role)与User的多对多的关系 --> ???????????<set name="users" table="t_user_role"> ?????????????<!--当前表(Role)的主键--> ?????????????????????????????<key column="role_id"></key> ?????????????<many-to-many class="User" column="user_id"></many-to-many> ?????????</set> ?????</class> ?</hibernate-mapping> ?

多对多双向关系中,User和Role的映射文件相同,值得注意的是生成的中间表名称必须一样,生成中间表的字段必须一样。

hibernate多对多关联映射

原文地址:https://www.cnblogs.com/gXing/p/8650397.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved