Hibernate框架学习(六)——一对多&多对一关系
2024-08-31 08:54:38
一、关系表达
1、表中的表达
2、实体中的表达
3、orm元数据中的表达
一对多:(在Customer.hbm.xml中添加)
多对一:(在LinkMan.hbm.xml中添加)
最后别忘了在hibernate.cfg.xml中添加映射文件
二、操作关联属性
1、保存客户及客户下的联系人
public class Demo {
@Test
//保存客户以及客户下的联系人
public void fun1(){
//1.获得session
Session session = HibernateUtils.openSession();
//2.开启事务
Transaction tx= session.beginTransaction();
//3.操作
//=================================
Customer c=new Customer();
c.setCust_name("华为"); LinkMan lm1=new LinkMan();
lm1.setLkm_name("任正非"); LinkMan lm2=new LinkMan();
lm2.setLkm_name("孙亚芳"); //表达一对多,客户下有多个联系人
c.getLinkMens().add(lm1);
c.getLinkMens().add(lm2); //表达多对一,联系人属于哪个客户
lm1.setCustomer(c);
lm2.setCustomer(c); session.save(c);
session.save(lm1);
session.save(lm2);
//=================================
//4.提交事务
tx.commit();
//5.关闭资源
session.close();
}
}
查看数据库(cst_customer和cst_linkman表结果如下)
2、为客户增加联系人(只需要改变步骤三操作里的内容)
//1>获得要操作的客户对象
Customer c = session.get(Customer.class,4l);
//2>创建联系人
LinkMan lm1=new LinkMan();
lm1.setLkm_name("尹绪全");
//3>将联系人添加到客户,再将客户设置到联系人中
c.getLinkMens().add(lm1);
lm1.setCustomer(c);
//4>执行保存
session.save(lm1);
3、为客户删除联系人(依然只需要改变步骤三操作里的内容)
//1>获得要操作的客户对象
Customer c = session.get(Customer.class, 4l);
//2>获得要移除的联系人
LinkMan lm1=session.get(LinkMan.class, 3l);
//3>将联系人从客户集合中移除
c.getLinkMens().remove(lm1);
lm1.setCustomer(null);
三、进阶操作
1、级联操作(简化操作,一定要用save-update,不建议使用delete)
比方说级联保存更新时,配置文件修改好后可以省略最后联系人的保存操作。
2、关系维护(性能优化,提高关系维护的性能)
问题:在保存时,两方都会维护外键关系,关系维护两次,冗余了。
多余的维护关系语句是客户这一端在维护。
解决:
原则:无论怎么放弃,总有一方必须要维护关系。
一对多的关系中:一的一方放弃,只能一的一方放弃,多的一方不能放弃(外键字段就在多的一方,不能不维护自己的列)。
3、执行删除客户操作时,不能直接删除
最新文章
- ng-repeat循环出来的部分调用同一个函数并且实现每个模块之间不能相互干扰
- dependencies 和 devDependencies
- SQL一次查出多个字段的COUNT值
- SVM与LR的区别以及SVM的优缺点
- 每天一个linux命令(28):diff 命令
- php正则:匹配(),{},[]小括号,大括号,中括号里面的内容
- samba配置只读共享
- Echarts - js
- MVC中Model用法
- 【转】数据库SQL优化大总结之 百万级数据库优化方案
- 如何使ActionBar不那么单调
- 通过chrome inspect 来调试手机hybird APP
- Xapian使用入门
- webpack之带有可自动打开浏览器及热重载的基本配置
- 解决AndroidStudio引入Jar出现Unable to resolve dependency for ':app@debug/compileClasspath
- centos7 安装部署gitlab
- linux dhcp 简单配置
- MongoDB 和 NoSQL简介
- PKM(个人知识管理)类软件收集(偶尔更新列表)
- zTree插件 角色、部门、人员分类选择
热门文章
- 6 Python+Selenium的元素定位方法(CSS)
- 目录处理文件&;链接命令
- [Intermediate Algorithm] - Sum All Odd Fibonacci Numbers
- codeforces 789 A. Anastasia and pebbles
- Eclipse 中的 Bulid Path
- sass揭秘之@mixin,%,@function(转载)
- android学习路线总结
- Python爬虫3-----浏览器伪装
- C语言提高 (2) 第二天 用指针对字符串进行操作
- PHP 7 的五大新特性