Hibernate-3

目录

 

一对多|多对一

多对多


一对多|多对一

关系表达

表中的表达

orm元数据中表达

一对多

<!--集合,一对多关系,在配置文件中配置-->
<!--
  name属性:集合属性名
  column属性:外键列名
  Class属性:与我关联的对象完整类名
-->

<set name="linkMens">
  <key column="lkm_cust_id"></key>
  <one-to-many class="LinkMen" />
</set>
多对一

<!--
  name属性:引用属性名
  column属性:外键列名
  Class属性:与我关联的对象完整类名
-->

<many-to-one name="customer" column="lkm_cust_id" class="Customer">
</many-to-one>

 操作

操作关系属性

//3操作
Customer c = new Customer();
c.setCust_name("传智播客");

LinkMan lm1 = new LinkMen();
lm1.setLkm_name("李活命");

LinkMan lm2 = new LinkMan();
lm2.setLkm_name("刘跃东");

//表达一对多,客户下有多个联系人
c.getLinkMens().add(lm1);
c.getLinkMens().add(lm2);

session.save(c);
session.save(lm1);
session.save(lm2);
 

进阶操作

级联操作
<!--
  级联操作:cascade
  save-update:级联保存更新
  delete:级联删除
  all:save—update+delete
  级联操作:简化操作,目的是少写两行代码
-->

结论:简化操作。一定要用save-update,不建议使用delete。
关系维护
Hibernate:
    update
        cst_linkman
    set
        lkm_cust_id=?
    where
        lkm_id=?

Hibernate:
    update
        cst_linkman
    set
        lkm_cust_id=?
    where
        lkm_id=?
    

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

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

<!--
  inverse属性:配置关系是否维护
  true:customer不维护关系
  false(默认值):customer维护关系

  inverse属性:性能优化,提高关系维护的性能
  原则:无论怎么放弃,总有一方必须要维护关系
  一对多关系中,一的一方放弃,也只能一的一方放弃,多的一方不能放弃
-->

多对多

关系表达

表中

对象中

orm元数据

<!-- 多对多关系表达-->
<!--
  name:集合属性名
  table: 配置中间表名
  key
  |-column:外键,别人引用我的外键列名
  class:我与哪个类是多对多关系
  column:外键,我引用此人的外键列名
-->

<set name="roles" table="sys_users_role">
  <key column="user_id"></key>
  <many-to-many class="Role" column="role_id"></many-to-many>
</set>

操作

操作关联属性

//3>用户表达关系
u1.getRoles().add(r1);
u1.getRoles().add(r2);

u2.getRoles().add(r1);
u2.getRoles().add(r2);

//4> 角色表达关系
r1.getUsers().add(u1);
r1.getUsers().add(u2);

r2.getUsers().add(u1);
r2.getUsers().add(u2);

操作进阶

inverse属性
<!--
    使用inverse属性
    true:放弃维护外键关系
    false(默认值):维护关系

结论:将来在开发中,如果遇到多对多关系,一定要选择一方放弃维护关系。一般谁来放弃要看业务方向,例如录入员工时,需要为员工指定所属角色。那么业务方向就是由员工维护角色,角色不需要维护与员工关系,角色放弃维护。
-->


级联属性
<!--cascade级联操作-->
    save-update:级联保存更新
    delete:级联删除
    all:级联保存更新+级联删除

  结论:cascade简化代码书写,该属性是不是用无所谓。建议要用只用save-update,如果使用delete操作太过危险,尤其在多对多中不建议使用。
原文地址:https://www.cnblogs.com/strawqqhat/p/10602202.html