Hibernate框架入门(三)

                                         第一章 一对多|多对一

1.1 关系表达

多表关系 多对一|一对多 多对多 一对一

客户表与联系人表是一对多的

在表中表达:

在实体中表达:

一的一方(客户)在配置中的书写:

多的一方(联系人)在配置中的书写:

1.2 操作

保存客户以及客户下的联系人

为客户增加联系人:

为客户删除联系人:

这样保存客户又保存联系人比较麻烦,希望保存客户时能顺带保存联系人,可以使用级联操作cascade,cascade有三个属性,分别是save-update级联更新保存,delete级联删除,all就是save-update+delete 。

主要是为了简化操作,少写两行代码。

在customer的配置文件下进行级联:

save-update:

delete:

在LinkMan的配置文件下进行级联:

save-update:保存联系人以及联系人对应的客户

要用的话建议只用save-update,用delete的话容易出事。

关系维护:

 当我们如下图进行保存之后

首先三个insert,将一个客户和两个联系人插入并没有问题,但是接下来多了两个更新,来更新联系人的外键。客户会维护联系人与客户的关系,联系人也会维护它们之间的关系,关系维护了两次,右图的两条是冗余的,多余的两条语句是客户在维护关系,大胆推测一下,客户维护关系是在用update,联系人维护关系就是直接更新了外键。

我们可以配置inverse来决定关系是否维护

如果设置客户不维护关系,右图中的代码可以不写 

在删除时,若将customer中的inverse置为true,则删除customer时不会将联系人中的外键置为空,因为customer不维护关系了。

inverse属性属于性能优化,目的是简化操作,少写两行代码。

原则:无论怎么放弃,总有一方要维护关系,一的一方放弃,也只能一的一方放弃。多的一方是不能放弃维护关系的,因为外键列字段在多的一方。

                                              第二章 多对多

2.1 表中表达

2.2 实体表达

都使用集合表达有多个对方,不用为中间表建立实体。

User:

Role:

2.3 orm元数据

User配置文件中的配置:

Role配置文件中的配置:

剩下的反过来就好:

最后记得在主配置文件中进行配置

2.4 操作

2.4.1 增加员工和角色并进行显示

下面是个错误的示范:只进行代码的编写,不修改配置文件。

多对多操作时要向中间表中插入数据,所以如果两方都维护关系会插入两次导入报错。之前单表没事是因为单表做的时修改即update操作,在这里我们有两种方法解决这个问题。

第一种:将下面的代码进行注释

第二种:配置inverse属性,让某一方放弃对关系的维护。

在开发项目时,一定要选择一方放弃维护关系,一般谁来放弃看业务方向,例如录入员工时,需要为员工指定所属角色,那么业务方向就是由员工来维护角色,角色不需要维护与员工关系,角色放弃维护。

2.4.2 为用户增减增角色

(1)获得郝强勇用户

(2)创建公关角色

(3)将角色添加到用户中

(4)将角色转换为持久化

使用级联保存可以省掉第四部。

为郝强勇解除一个角色:

猜你喜欢

转载自blog.csdn.net/q610376681/article/details/81159439