CRM客户关系管理系统开发第十五讲——客户和联系人之间的两个问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yerenyuan_pku/article/details/102238674

到现在为止,客户管理模块和联系人管理模块我们都已经开发好了,接下来,是不是可以继续开发其他模块了?不可以,因为客户管理模块中还有一些尚待解决的bug,这些bug隐藏的很深,稍微不注意,就很容易让人忽略掉。

级联删除的问题

问题描述

发布我们的项目到Tomcat服务器并启动,然后访问该项目的首页,点击客户列表超链接之后就能看到客户列表了,而且从下图中,我们可以看到一个名称为赵叶333333的客户。
在这里插入图片描述
点击联系人列表超链接之后,我们就能看到联系人列表了,而且从下图中,可以看到名称为赵叶333333的客户有一个名称为叶良辰的联系人。
在这里插入图片描述
此时,如果我们删除掉名称为赵叶333333的客户,那么会出现什么情况呢?现在确实是删除掉了客户,但是该客户所属的联系人并没有被删除掉,而且联系人所属客户名称不见了,这是因为在删除客户时,修改了联系人表中的外键(即将联系人表中的外键置为null)。
在这里插入图片描述

解决问题

现实中,我们往往会有这样的需求,就是在删除客户的时候,同时级联删除这个客户所属的联系人。为了解决该需求,首先要在CustomerAction类中编写一个删除客户的方法,而且在删除客户时,我们一定得先查询再删除,为什么啊?因为现在咱要做级联删除,即在删除客户的时候,顺便把这个客户下面的联系人也都删掉,如果你不先查询再删除,那么你只能删客户,这个客户下面的联系人是删不掉的。
在这里插入图片描述
然后,直接在客户的映射文件中添加一个cascade属性。
在这里插入图片描述
现在,如果我们想要删除掉一个客户,那么这个客户下的联系人就都可以删除掉了。

修改客户的时候,联系人所关联的客户的信息丢失了

问题描述

如果我们现在想要修改一下名称为赵叶333333的客户,例如将其名称修改为赵叶,那么在查询该客户所关联的联系人时,便会发现查询出来的联系人的所属客户名称并未由赵叶333333变成赵叶,而是啥都没有了。
在这里插入图片描述
怎么会搞成这样呢?我们在进行修改客户的时候,页面上只有客户的信息,客户所关联的联系人的信息是没有的,也就是说客户实体类中的那个联系人的集合此刻是一个null的。当我们点击保存按钮真正进行修改客户的时候,便会把这个客户里面的所有属性全都修改,包括那个联系人的集合,原来这个联系人的集合里面是有数据的,现在咱一修改,集合就变成是一个null的了,这样一来,将修改后的客户保存到数据库中时,该客户下面所关联的那些联系人的外键就全给置成null了。这是因为现在一的一方是有外键维护权的!而集合对应的恰好就是那个外键。

解决问题

通常我们都会在多的一方维护关联关系,也就是说使一的一方放弃外键维护权,所以最好由联系人来维护双向关联关系,这样子的话,客户的映射配置文件应修改为:
在这里插入图片描述
如此一来,当咱在修改客户的时候,联系人所关联的客户的信息就不会丢失了。

猜你喜欢

转载自blog.csdn.net/yerenyuan_pku/article/details/102238674
今日推荐