在多表关联的关系中,如果要删除其中一个表中的一条子数据,必定与这个表,这条数据有关联的数据也会被删除,但是这样的结果却不是我们要见到的。而我们要的效果是,1.删除子数据,父数据不被删除,与关联的表也不删除。2.删除父数据,而父数据下的子数据,孙子数据也会被删除,而与它关联的表也不删除。而怎样实现这样的结果呢,这就需要我们去打破他们之间的关系了。怎么打破呢,看下面的代码。
----这是一个个人空间中说说表say的删除代码-----------
发表一条说说,要知道发表说说的人,和回复说说的人,而这俩者都是一个user表里面的。
所以说,这个说说表say是跟用户表user是关联的,用户表跟说说表是一对多的关系。
-------
删除父说说------
@Transactional
public boolean deleteFatherSay(Integer sayId) {
Say say = sayDao.findById(sayId); //获取"父节点"
Iterator<Say> iter = say.getSays().iterator(); //获取"父节点"下的"子节点",并存在迭代器里面
for (int i = 0; i < say.getSays().size(); i++) {//循环遍历每个"子节点"
Say say1 = iter.next(); //获取单个的子节点
Iterator<Say> iter1 = say1.getSays().iterator(); //获取单个"子节点"下"孙子节点",并存在迭代器里面
for (int j = 0; j < say1.getSays().size(); j++) {//循环遍历每个"孙子节点"
Say say2 = iter1.next(); //获取单个的孙子节点
say2.setUser(null); //打破"孙子节点"与user的关联
say2.setSay(null); //打破"孙子节点"与"子节点"的关系(删除"孙子节点"时,就不会把与"孙子节点"相关联的"子节点"也删除)
sayDao.delete(say2);
}
say1.setSay(null);
say1.setUser(null);
sayDao.delete(say1);
}
say.setUser(null);
sayDao.delete(say);
return true;
}
----
删除子说说----
@Transactional
public boolean deleteSonSay(Integer sayId) {
Say say = new Say();
say.setSayId(sayId);
String hql = "from Say as say1 where say1.say=" + sayId;
List<Say> list = sayDao.findByHql(hql);
Iterator<Say> iter = list.iterator();
for (int i = 0; i < list.size(); i++) {
Say say1 = iter.next();
say1.setUser(null);
say1.setSay(null);
sayDao.delete(say1);
}
say.setSay(null);
say.setUser(null);
say.setSays(null);
sayDao.delete(say);
return true;
}
---
删除孙子说说---
@Transactional
public boolean deleteGrandsonSay(Integer sayId) {
Say say = sayDao.findById(sayId);
say.setSay(null);
say.setUser(null);
say.setSays(null);
sayDao.delete(say);
return true;
}
----------结论-----------
如何打破他们的关系,就要知道一点,先打破下层关系,再打破上层的关系,这是自下而上来打破它们间的关系。
父---子---孙子,(说说表say和用户表user有关联,所以say.setUser(null),这样就打破了和用户表之间的关联关系).
1.删除孙子的说说,这要把上层的关系打破就行了say.setSay(null),这样删除孙子说说,就不会删除子说说和父说说。
2.删除子说说(子说说是夹在父说说和孙子说说之间),还是按照自下而上的规则,先找出子说说的所有孙子说说,然后用for循环遍历每一个孙子说说,然后再打破孙子say.setSay(null);say.setUser(null);和上层的关系,最后删除孙子说说,然后子说说在打破和上层父说说的关系say.setSay(null);say.setUser(null);,最后删除子说说,那么子说说下的孙子说说也全部删除,而父说说则不会影响到。
3.删除父说说,那么就要循环删除子说说和孙子说说,及要打破他们各自的关系。删除完父说说的子说说和孙子说说,最后再打破和用户表的关系say.setUser(null).这样就能删除父说说的同时也删除完他下面的说说,而不会影响到用户表user.
分享到:
相关推荐
这样,线性感知机加上非线性单元就形成了单个神经元,它可以描述输出与一个或多个变量之间的非线性关系。 进一步,当输入变量增多时,我们可以通过多个神经元构建一个多层的神经网络。这些神经元组成隐藏层,它们...
总结,本章节主要涵盖了统计学中的相关关系、线性回归、卡方检验、最小二乘法以及列联表分析等核心概念,这些都是在解决实际问题,如高考数学试题中,经常遇到的统计方法。通过这些方法,我们可以定量地分析变量间的...
通过上述内容的分析,可以看出,“2021年苏教版六年级下册语文选词填空突破训练”中的练习题涵盖了语文基础知识的各个方面,包括词汇积累、逻辑关系表达、近义词辨析、形近字组词、词语修饰作用、成语俗语应用等,...
在信息技术高速发展的当今时代,数据库已经成为数据存储与管理的核心。随着技术的不断进步,数据库的应用变得越来越广泛,...通过深入研究和实践这些技术,可以期待未来在数据处理和分析方面将会有更多的创新和突破。
3. Hibernate框架:Hibernate是一个ORM框架,能够将Java对象映射到关系型数据库的数据表中,使得开发者可以以面向对象的方式操作数据库。Hibernate的核心API和关联映射关系是其重要组成部分,而Hibernate的高级查询...
发散思维有多种实现方式,如多向求解法、多级发散法、交叉发散法和侧向发散法,能够帮助我们打破思维定势,拓宽思考范围。 4. 联想思维:通过建立事物之间的关联来激发创新。联想思维包括接近联想、对比联想、相似...
在当今社会,随着经济的快速发展和职业种类的多样化,青年在面临职业选择时需要考虑的因素越来越多。苏教版45分钟课堂达标测试《青年在选择职业时的考虑》正是为了解决这一实际问题而设计的,其不仅考查学生对语文...
接近联想、对比联想、相似联想和关系联想四种方式帮助我们跨越思维的界限,找到看似无关事物之间的关联。 纵向思维要求我们沿着一个明确的目标或方向深入探索,不断挖掘,直到找到解决问题的关键。正如老子的“挖井...
5. **词语关联网**:展示词汇间的关联,强化词汇记忆,提高语言运用能力。 6. **结构分析图**:分析文章的结构布局,如开头、发展、高潮和结局,培养学生的篇章结构意识。 7. **写作技巧示意图**:演示各种写作...
例如因果、条件、并列等关联词,这些词是句子逻辑关系的体现,重组时要保持原有的逻辑结构不变。在此基础上,可以适当改变词序来形成新的句子,但必须注意,词序的改变不能影响到句子原意的表达。这就需要我们在练习...
3. **建联系,找解题突破口**:将条件与结论关联起来,寻找证明的切入点,可能需要构造辅助线或者利用已知的几何性质。 例如,在2012年山东高考的一个满分12分的题目中,几何体E-ABCD是一个四棱锥,其中△ABD是正...
这个PPT可能包含了多种方法和策略,旨在帮助学生在面对高考作文时能够突破传统思维,找到新颖独特的立意和表达方式。 【标签】"文档"表明这是一个教学资料,可能是教师或教育专家为学生准备的参考资料。 以下是...
在地理关联图的选择题中,将选项内容“填入”图中,往往能更直观地揭示地理现象之间的逻辑关系。考生通过这样的实践操作,可以更清晰地理解地理现象之间的内在联系。 尝试验证法则是将选项代入地理关联图中,通过...
这些知识点涵盖了家庭教育、家庭结构、孝道、网络安全、沟通技巧、亲子关系、青少年心理发展以及网络交往的影响等多个方面,是初中政治课程中的重要内容。学习这些知识有助于学生理解和处理日常生活中的各种关系,...
关联词“不论……都……”、“之所以……是因为……”、“不但……而且……”、“不是……而是……”的选择使用,要求学生理解各关联词的含义和搭配,能够准确地表达逻辑关系。 五、句子改写与病句修正 1. 题目要求...
4. **假设条件句**:“如果...”句型让学生学会在假设条件下进行思考和表达,如“如果你打破了窗户玻璃,你该怎么做呢?”。 5. **动词的运用**:“保护”、“喜欢”等动词的练习,让学生理解并使用这些常见的行为...
本文件标题中提及的【3年中考2年模拟】浙江省2013届中考数学专题突破3.4反比例函数(pdf)新人教版,属于练习材料,这类材料旨在帮助学生理解和掌握反比例函数的知识点,并通过历年中考真题的演练来提高解题能力。...
- **倾听**:学会专心聆听他人意见,并能判断其是否与主题相关联。 #### 二、教学重点与难点 - **重点**: - 明确话题并围绕其展开讨论,确保论述有条理。 - 通过图片或实物辅助说明,提升口语表达能力。 - **...
传播学是研究人类信息传递与社会关系相互作用的学科,主要关注信息的产生、传递、接收和影响。在本章中,我们探讨了传播学的基本概念和理论。 首先,信息被定义为物理载体和意义的统一整体。这是因为信息不仅仅是...