一、关系表达

1、表中的表达

Hibernate框架学习(六)——一对多&多对一关系

2、实体中的表达

Hibernate框架学习(六)——一对多&多对一关系

3、orm元数据中的表达

一对多:(在Customer.hbm.xml中添加)

Hibernate框架学习(六)——一对多&多对一关系

多对一:(在LinkMan.hbm.xml中添加)

Hibernate框架学习(六)——一对多&多对一关系

最后别忘了在hibernate.cfg.xml中添加映射文件

Hibernate框架学习(六)——一对多&多对一关系

二、操作关联属性

1、保存客户及客户下的联系人

 1 public class Demo {
 2     @Test
 3     //保存客户以及客户下的联系人
 4     public void fun1(){
 5         //1.获得session
 6         Session session = HibernateUtils.openSession();
 7         //2.开启事务
 8         Transaction tx= session.beginTransaction();
 9         //3.操作
10         //=================================
11         Customer c=new Customer();
12         c.setCust_name("华为");
13         
14         LinkMan lm1=new LinkMan();
15         lm1.setLkm_name("任正非");
16         
17         LinkMan lm2=new LinkMan();
18         lm2.setLkm_name("孙亚芳");
19         
20         //表达一对多,客户下有多个联系人
21         c.getLinkMens().add(lm1);
22         c.getLinkMens().add(lm2);
23         
24         //表达多对一,联系人属于哪个客户
25         lm1.setCustomer(c);
26         lm2.setCustomer(c);
27         
28         session.save(c);
29         session.save(lm1);
30         session.save(lm2);
31         //=================================
32         //4.提交事务
33         tx.commit();
34         //5.关闭资源
35         session.close();
36     }
37 }

查看数据库(cst_customer和cst_linkman表结果如下)

Hibernate框架学习(六)——一对多&多对一关系

Hibernate框架学习(六)——一对多&多对一关系

2、为客户增加联系人(只需要改变步骤三操作里的内容)

 1      //1>获得要操作的客户对象
 2         Customer c = session.get(Customer.class,4l);
 3         //2>创建联系人
 4         LinkMan lm1=new LinkMan();
 5         lm1.setLkm_name("尹绪全");
 6         //3>将联系人添加到客户,再将客户设置到联系人中
 7         c.getLinkMens().add(lm1);
 8         lm1.setCustomer(c);
 9         //4>执行保存
10         session.save(lm1);

3、为客户删除联系人(依然只需要改变步骤三操作里的内容)

1         //1>获得要操作的客户对象
2         Customer c = session.get(Customer.class, 4l);
3         //2>获得要移除的联系人
4         LinkMan lm1=session.get(LinkMan.class, 3l);
5         //3>将联系人从客户集合中移除
6         c.getLinkMens().remove(lm1);
7         lm1.setCustomer(null);        

 三、进阶操作

1、级联操作(简化操作,一定要用save-update,不建议使用delete)

比方说级联保存更新时,配置文件修改好后可以省略最后联系人的保存操作。

Hibernate框架学习(六)——一对多&多对一关系

2、关系维护(性能优化,提高关系维护的性能)

问题:在保存时,两方都会维护外键关系,关系维护两次,冗余了。

   多余的维护关系语句是客户这一端在维护。

Hibernate框架学习(六)——一对多&多对一关系

解决:

Hibernate框架学习(六)——一对多&多对一关系

原则:无论怎么放弃,总有一方必须要维护关系。

一对多的关系中:一的一方放弃,只能一的一方放弃,多的一方不能放弃(外键字段就在多的一方,不能不维护自己的列)。

 3、执行删除客户操作时,不能直接删除

Hibernate框架学习(六)——一对多&多对一关系

相关文章:

  • 2021-08-09
  • 2022-12-23
  • 2021-12-20
  • 2021-04-25
  • 2022-12-23
  • 2022-01-02
猜你喜欢
  • 2021-11-05
  • 2021-08-07
  • 2021-11-26
  • 2022-01-10
  • 2021-09-25
  • 2021-12-21
  • 2022-12-23
相关资源
相似解决方案