zoukankan      html  css  js  c++  java
  • 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操作太过危险,尤其在多对多中不建议使用。
  • 相关阅读:
    加密和解密配置节(asp2.0以后)http://www.cnitblog.com/lby91772/archive/2008/03/04/40436.html
    多线程消息队列 (MSMQ) 触发器 http://blog.sina.com.cn/s/blog_405ad00201007rlw.html
    NUnit的使用
    HDU 1896 Stones
    POJ 1862 Stripies(哈夫曼)
    ZOJ 3230 Solving the Problems
    HDU 1242 Rescue(BFS)
    ZOJ 3410 Layton's Escape
    求逆序数
    HDU 1873 看病要排队
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602202.html
Copyright © 2011-2022 走看看