Java 框架之Hibernate (三、Hibernate一对多及多对多的关系分析)
来源:互联网 发布:qq三国js技能名 编辑:程序博客网 时间:2024/05/29 10:12
上一篇博客中我们讲了一对一的关系,那么这篇博客我们来讲一讲一对多和多对多的关系,我们现在都是在建立关系,具体怎么使用,我会在下面的博客中提到,所以不要急。我们先把关系分析清楚,建立好关系。好,废话不多说,今天我们来说一说一对多的关系。
举个例子,省份和城市。这就是很典型的一对多,一个省份可以有多个城市,但一个城市只会有一个省份。那么,这如何在我们Hibernate中体现呢??
老规矩,首先是数据库设计,这里的设计和一对一就有点不一样了
我们来连两个表Province(省份)和 city(城市)
那么他们的字段如下
Province (主表) city(从表)
pid cid
pname cname
pid
这样我们可以很清楚的看到,在从表中有主表的主键列,但我们不需要设置外键,他们的关系依旧是在实体类与映射文件中体现出来
那么首先是实体类的设计
package com.zking.entity;import java.util.HashSet;import java.util.Set;public class Province { private int pid; private String pname; private Set<City> cities=new HashSet<City>(); public Set<City> getCities() { return cities; } public void setCities(Set<City> cities) { this.cities = cities; } public Province() { super(); } public Province(String pname) { super(); this.pname = pname; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; }}
j`package com.zking.entity;
public class City {
private int cid;
private String cname;
// private int pid;
private Province province;public Province getProvince() { return province;}public void setProvince(Province province) { this.province = province;}public City() { super(); // TODO Auto-generated constructor stub}public City(String cname) { super(); this.cname = cname;}public int getCid() { return cid;}public void setCid(int cid) { this.cid = cid;}public String getCname() { return cname;}public void setCname(String cname) { this.cname = cname;}
// public int getPid() {
// return pid;
// }
// public void setPid(int pid) {
// this.pid = pid;
// }
}
`
因为一个省份对应多个城市,所以不能使用城市对象,我们需要用一个Set集合(不会有重复值)
然后就是配置文件
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-8-22 15:14:11 by Hibernate Tools 3.5.0.Final --><hibernate-mapping> <class name="com.zking.entity.Province" table="PROVINCE"> <id name="pid" type="int"> <column name="PID" /> <generator class="native" /> </id> <property name="pname" type="java.lang.String"> <column name="PNAME" /> </property> <set name="cities" table="city" cascade="save-update"> <key column="pid"></key> <one-to-many class="com.zking.entity.City"/> </set> </class></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-8-22 15:14:11 by Hibernate Tools 3.5.0.Final --><hibernate-mapping> <class name="com.zking.entity.City" table="CITY"> <id name="cid" type="int"> <column name="CID" /> <generator class="native" /> </id> <property name="cname" type="java.lang.String"> <column name="CNAME" /> </property> <!-- <property name="pid" type="int"> <column name="PID" /> </property> --> <many-to-one name="province" class="com.zking.entity.Province" column="pid"></many-to-one> </class></hibernate-mapping>
这样,我们一对多的关系就已经建立了,至于怎么去使用,不要着急,我会在接下来的几篇博客中讲,好,我们现在来建立多对多的关系
举个例子 用户和角色 这就是典型的多对多,一个用户可以有多个角色,一个角色可以赋给多个用户
还是一样的首先是数据库的设计,这里的设计有点不一样,这里需要一张中间表
users roles
uid rid
unamd rname
然后这里我们需要一张中间表u_r
字段就是
uid
rid
这样我们数据库就已经设置好了
然后就是实体类的设计
package com.zking.entity;import java.util.HashSet;import java.util.Set;public class Users { private int uid; private String uname; private Set<Roles> roles=new HashSet<Roles>(); public Set<Roles> getRoles() { return roles; } public void setRoles(Set<Roles> roles) { this.roles = roles; } public Users() { super(); // TODO Auto-generated constructor stub } public Users(String uname) { super(); this.uname = uname; } public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; }}
package com.zking.entity;import java.util.HashSet;import java.util.Set;public class Roles { private int rid; private String rname; private Set<Users> users=new HashSet<Users>(); public Set<Users> getUsers() { return users; } public void setUsers(Set<Users> users) { this.users = users; } public Roles() { super(); } public Roles(String rname) { super(); this.rname = rname; } public int getRid() { return rid; } public void setRid(int rid) { this.rid = rid; } public String getRname() { return rname; } public void setRname(String rname) { this.rname = rname; }}
然后我们的连接表是不需要实体类的,他们关系以及连接表的作用主要在映射文件中体现出来
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-8-22 15:41:45 by Hibernate Tools 3.5.0.Final --><hibernate-mapping> <class name="com.zking.entity.Users" table="USERS"> <id name="uid" type="int"> <column name="UID" /> <generator class="native" /> </id> <property name="uname" type="java.lang.String"> <column name="UNAME" /> </property> <set name="roles" table="u_r" cascade="save-update"> <key column="uid"></key> <many-to-many class="com.zking.entity.Roles" column="rid"></many-to-many> </set> </class></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-8-22 15:41:45 by Hibernate Tools 3.5.0.Final --><hibernate-mapping> <class name="com.zking.entity.Roles" table="ROLES"> <id name="rid" type="int"> <column name="RID" /> <generator class="native" /> </id> <property name="rname" type="java.lang.String"> <column name="RNAME" /> </property> <set name="users" table="u_r"> <key column="rid"></key> <many-to-many class="com.zking.entity.Users" column="uid"></many-to-many> </set> </class></hibernate-mapping>
我们配置了两个集合,在映射文件中配置了两个set使用中间表将他们连接起来了,到这里我们关系就建立好了。
那么现在,我们的关系建立基本就讲完了,下一篇博客我会讲一下如何在项目中去使用
- Java 框架之Hibernate (三、Hibernate一对多及多对多的关系分析)
- Hibernate 一对多的关系
- Hibernate一对多的关系
- 【SSH三大框架】Hibernate基础第六篇:多对一关联关系的映射、分析及添加、查询
- Hibernate学习之表一对多,多对一关系
- 【hibernate】多对一,一对多关系
- Hibernate一对多及多对一关联映射(三)
- hibernate 一对多关联关系(详细分析)
- 【hibernate框架】关于多对一与一对多关系的剖析
- Hibernate的关系映射(一对多和多对多)
- Hibernate一对多、多对一关联关系的使用
- Hibernate的关系映射-------多对一与一对多
- hibernate的一对多和多对一关系映射
- hibernate双边的多对一、一对多关系
- hibernate 一对多 多对一 关系的理解
- Hibernate中一对多、多对一关系的映射
- Hibernate 多对一与一对多的关系
- 【SSH三大框架】Hibernate基础第七篇:一对多关联关系的操作
- Make编译C/C++程序时,Terminal中的编译信息全是统一颜色,找error头大!!!?
- 中企动力联袂奥组委“传神”赋企业数字化转型“真经”
- vim格式化代码实际上就是 "缩进代码", 命令是等号=
- 第二章 Spring MVC入门 —— 跟开涛学SpringMVC
- java中static{}语句块详解
- Java 框架之Hibernate (三、Hibernate一对多及多对多的关系分析)
- 使用Powerdesigner从sql server数据库生成pdm
- 解决 iframe 在 iPad 上无法滚动的问题
- Hibernate HQL查询 插入 更新(update)实例
- pdb: Using the Python debugger in Django
- 解决瀑布流recyclerview的闪烁移动问题
- Extjs grid中的选择框默认选择时为对号,改为叉号
- Win10 下面PowerShell 运行python2.7
- 在modal viewcontroller外点击屏幕dismiss