Hibernate映射—— 多对多关联映射
来源:互联网 发布:帝国cms 获取网站地址 编辑:程序博客网 时间:2024/05/22 04:45
映射原理
不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联。用第三张表来解决可能会造成数据冗余的问题。
举例
一个用户(User)对多个角色(Role),一个角色对多个用户。
分类
单向的多对多关联映射(单向User--->Role)
对象模型
关系模型
实例
下面我们看一下实体类和映射文件的代码。
User
- package com.liang.hibernate;
- import java.util.Set;
- 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 Set getRoles() {
- return roles;
- }
- public void setRoles(Set roles) {
- this.roles = roles;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
Role
- package com.liang.hibernate;
- public class Role {
- private int id;
- private String name;
- 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;
- }
- }
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>标签来关联另一张表。
阅读全文
0 0
- Hibernate映射—— 多对多关联映射
- Hibernate映射—— 多对一单向关联映射
- Hibernate关联映射--多对一映射
- Hibernate关联映射-----多对多关联
- Hibernate(四):Hibernate映射——多对一单向关联映射
- Hibernate(六)——多对多关联映射
- Hibernate(六)——多对多关联映射
- 【Hibernate】——多对多关联映射
- 008——hibernate多对多关联映射
- 【Hibernate】——多对多关联映射
- Hibernate——多对一关联映射
- 【Hibernate】——多对一关联映射
- 【Hibernate框架】关联映射(多对多关联映射)
- Hibernate关联映射之一对多单向关联映射
- Hibernate关联映射之多对多单/双向关联映射
- Hibernate关联关系映射(多对一关联映射)
- Hibernate关联映射之一对多、多对多映射
- 【SSH进阶之路】Hibernate映射——多对多关联映射(八)
- 冒泡算法----Java
- Java学习心得之语法基础(一)
- Jqgrid给序号列增加标题名称
- 操作系统的几种IO方式
- Android 缓存数据
- Hibernate映射—— 多对多关联映射
- 数字图像处理之椒盐噪声和中值滤波
- 编写JQuery UI 插件
- BZOJ 3594 方伯伯的玉米田 (二维树状数组优化dp)
- 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet
- selenium自动化测试 java 选择 下拉列表 的一个选项
- 常量指针,常指针,指针常量,指向常量的指针,为什么常量指针仍可以指向变量
- java实时读取log日志文件
- [LeetCode]3Sum Closest题解