首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hibernate实体关系映射

前言:

上一篇文章我们学习了Hibernate的框架搭建,并且完成了单表的CRUD操作,今天我们来学习Hibernate中的多表关联。

主要来说最常见的两种关系:一对多关系,多对多关系。

我们写程序就是为了解决现实生活中的问题,所以我们用现实生活中的例子去理解程序就会比较容易。

一对多关系:

生活中常见的一对多关系就是客户和订单的关系,每一个客户可以购买多个产品,生成多个订单,但是一个订单只能属于一个客户,所以客户(Customer)是一,订单(Orders)是多。

这种关系在数据库中如何体现呢?

数据表中一的一方是主表(Customer),多的一方是从表(Orders),通过主外键关联关系来维护这种关系。

从表中的cid为外键,该外键被主表的主键id所约束。

在面向对象的思想中,如何体现这一关系呢?

在面向对象的场景中它们的关系应该是Orders拥有一个Customer对象属性,Customer拥有一个Orders集合属性。

多对多关系:

大学生选课则是一个典型的多对多关系的体现,我们知道一个学生可以选择多门课程,同时,一门课程也可以被多个学生选择,所以学生(Student)是多,课程(Classes)也是多。

数据库中是通过两个一对多关系来维护这种关系的,即Student表和Classes都是主表,额外增加一张中间表作为从表(Student_Classes),两张主表与中间表之间都是一对多的关系。

中间表(Student_Classes)中的sid和cid均为外键,分别被Student表的id和Classes表的id约束。

在面向对象的场景中它们的关系应该是Student拥有一个Classes集合属性,同时,Classes拥有一个Student集合属性。

好了,解释完一对多和多对多关系,我们会发现Java与数据库完全是两种思维方式来体现这两个关系,Hibernate框架的作用就是将这两种思维方式进行转换和映射。

代码:

通过前面的学习,我们知道Hibernate框架是通过配置实体关系映射文件进行转换的。

一对多:

set标签来配置实体类中的集合属性orders;

name与实体类属性名对应;

table与数据表字段名对应;

key与外键字段名对应;

one-to-many与集合泛型的实体类对应。

many-to-one标签来配置实体类对应的对象属性customer;

name与属性名对应;

class与属性的所属类对应;

column与外键字段名对应。

接下来就可以调用Hibernate API进行操作了。

多对多:

name是实体类对应的集合属性名,

table对应中间表名,

key对应中间表的外键字段名,

many-to-many与集合泛型的实体类对应,column属性与中间表的外键字段名对应。

调用Hibernate API进行操作。

总结:

使用Hibernate完成一对多和多对多关系映射,重点是要理解两点:1.数据表中如何维护;2.Java代码中如何维护。搞清楚这两者的区别,就明白了Hibernate框架的用法,使用Hibernate特定的标签进行配置即可。

源码:

链接:https://pan.baidu.com/s/1i6fYQBr

密码:iz21

下一篇:Hibernate延迟加载

专业 热爱 专注

致力于最高效的Java学习

Java大联盟

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180125G0JI3O00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券