对象关系映射

一对多和多对一的对象关系映射配置
使用全xml的配置方式:
主配置文件,主配置文件放在根目录src下:

例子:客户Customer和联系人linkman,一个客户对应多个联系人,
也就是说,客户是一的一方,联系人是多的一方;
先配置一的一方:
在一对多的关系映射中,一的一方Customer应该包含多的一方linkman的实体的集合引用,还要生成该集合的getter、setter方法,此条配置在一的一方Customer的实体类中体现出来:如下图

然后还需要给Customer配置一个对应的xml文件,通常命名为:实体名.hbm.xml

关于一的一方Customer就配置完成,下面配置多的一方Linkman;
同样的,在一对多的关系映射中,多的一方Linkman需要持有一的一方Customer实体的引用,该配置体现在Linkman的实体类中,也要生成该对象的getter、Setter方法,如下图:

然后还需要给Linkman配置一个对应的xml文件,通常命名为:实体名.hbm.xml

多对多的对象关系映射配置
多对多的的对象关系映射的配置的主配置xml文件和一对多的一样,可以直接查看本文档的第一张图片,参考配置即可;
多对多的的对象关系映射的配置以用户Roles和角色Users为例,因为一个用户可以有多个角色,而一个角色可以有多个用户,就形成了多对多的关系映射;
因为是多对多关系,所以两个对象的实体类中都持有对方实体的集合引用,并且声称getter、setter方法,如下图
先展示用户Roles的实体类的配置

下面展示Roles的xml配置文件的代码。该xml文件的命名和一对多的xml文件一样;
因为多对多的对象关系会有一张中间表,中间表保存了多对多的两张表的主键,

角色Roles就配置完了,下面开始配置用户Users;
先展示用户Users实体类中的配置代码:如下图

下面再展示用户Users对象对应的xml文件,

JPA注解配合hibernate操作对象
这种方式就是使用JPA注解在实体类上标注,然后使用hibernate的方法来操作对象,这样的操作方式可以不用给实体类对象配置对象的xml文件,只需要一个主配置xml文件即可,下图就是主配置xml的,这个配置文件不管是一对多还是多对多都适用。

下面就先展示一对多使用JPA在实体类中是如何配置的;一的一方是客户Customer,多的一方是联系人Linkman;JPA注解都必须导javax.persistence.*下面的包。
如下图先展示一的一方Customer:

下面是多的一方Linkman:

一对多的客户与联系人就配置完成,现在只需要在主配置文件中将这两个实体类的所在的包的位置配置出来就可以进行对象的操作了
下面是JPA多对多的配置
多对多配置还是以用户Users和角色Roles为例子,在多对多的关系中,都需要在两个对象中生成对方实体的集合的引用,并生成getter、setter方法;
先展示用户Users:

下面展示角色Roles:

上面的配置完成,
但是在实际开发中,不能配置双向级联删除,因为这样会造成所有表的数据都被清空。因为在实际开发的多对多关系中,谁维护中间表,谁就来操作中间表的操作,另一方就放弃维护的权力,变成相当于单表操作,相当于在实体开发中cascade=CascadeType.All这个属性就不能像上面举例一样配置了,只能想下面这样配置多对多,
还是以本次的用户和角色为例,实际开发中的配置应该是这样,角色Roles放弃对中间表的维护权力。如下如:

而用户Users这边就如下图:

这样配置过后就可以达到删除某个用户会同时删除中间表中该用户的相关数据,但是不会把角色表数据删除,此时的角色表就仅仅是一张单表操作了,他的任何操作都不会影响中间表和用户表

并且在实际开发中一对多的时候,必然是一的一方放弃维护权力,
也就是配置mappedBy=“一的一方实体名”,所以在上面的列子中,客户和联系人使用JPA 配置方式的列子的配置符合实际开发的要求,因为客户Customer作为一的一方放弃维护表的权力

猜你喜欢

转载自blog.csdn.net/weixin_42123113/article/details/82968788