第一章 一对多|多对一

1.1 关系表达

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

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

在表中表达:

Hibernate框架入门(三)

在实体中表达:

Hibernate框架入门(三)

 

一的一方(客户)在配置中的书写:Hibernate框架入门(三)

Hibernate框架入门(三)

多的一方(联系人)在配置中的书写:Hibernate框架入门(三)

Hibernate框架入门(三)

1.2 操作

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

Hibernate框架入门(三)

Hibernate框架入门(三)

为客户增加联系人:

Hibernate框架入门(三)

为客户删除联系人:

Hibernate框架入门(三)

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

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

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

save-update:

Hibernate框架入门(三)

Hibernate框架入门(三)

 

delete:

Hibernate框架入门(三)

Hibernate框架入门(三)

 

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

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

Hibernate框架入门(三)

Hibernate框架入门(三)

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

关系维护:

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

Hibernate框架入门(三)

Hibernate框架入门(三)

 

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

Hibernate框架入门(三)

Hibernate框架入门(三)

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

Hibernate框架入门(三)

如果设置客户不维护关系,右图中的代码可以不写 Hibernate框架入门(三)

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

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

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

 

                                              第二章 多对多

2.1 表中表达

Hibernate框架入门(三)

2.2 实体表达

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

User:

Hibernate框架入门(三)

Role:

Hibernate框架入门(三)

2.3 orm元数据

User配置文件中的配置:

Hibernate框架入门(三)

Role配置文件中的配置:

剩下的反过来就好:

Hibernate框架入门(三)

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

2.4 操作

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

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

Hibernate框架入门(三)

Hibernate框架入门(三)

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

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

Hibernate框架入门(三)

 

 

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

Hibernate框架入门(三)

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

2.4.2 为用户增减增角色

(1)获得郝强勇用户

Hibernate框架入门(三)

(2)创建公关角色

Hibernate框架入门(三)

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

Hibernate框架入门(三)

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

Hibernate框架入门(三)

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

Hibernate框架入门(三)

为郝强勇解除一个角色:

Hibernate框架入门(三)

相关文章:

  • 2022-01-19
  • 2021-06-14
  • 2021-06-29
  • 2022-12-23
  • 2022-12-23
  • 2021-11-28
  • 2021-09-27
  • 2021-11-28
猜你喜欢
  • 2021-11-28
  • 2021-12-05
  • 2021-11-28
  • 2021-11-28
  • 2021-11-28
  • 2021-11-28
相关资源
相似解决方案