hibernate第三天

表的关系

  三种:一对多;多对多;一对一(少用)。

    一对多:一个客户有多个联系人;多个联系人属于一个公司。

    多对多:一个角色有多个特权;一个特权属于多个用户。

一对多操作(映射配置)

  

//Hibernate要求使用集合来表示多的数据,用set集合
private Set<LinkMan> setLinkMan = new HashSet<LinkMan>(); 生成属性set & get 方法。

    <!-- set name值:在客户实体类中表示联系人的set集合名称 -->
           <set name="setLinkMan">
           <!-- 一对多建表,有外键
               Hibernate机制:双向维护建表,在一和多那一方都配置外键
               column属性值:外键名称 customer+linkman+id
            -->
               <key column="clid"></key>
               <!-- 客户所有联系人,class里面写联系人实体类全路径 -->
               <one-to-many class="cn.itcast.entity.LinkMan"/>
           </set>

private Customer customer;

<!-- 表示联系人所属客户
            name:写customer名称
            column:外键名称
         -->
        <many-to-one name="customer" class="cn.itcast.entity.Customer" column="clid"></many-to-one>

核心配置文件中配置:

Customer ct = new Customer();
            ct.setCustName("baidu");
            ct.setCustLevel("vip");
            ct.setCustMobile("1231");
            ct.setCustPhone("020");
            ct.setCustSource("网络");
            
            LinkMan lk = new LinkMan();
            lk.setLkm_name("small");
            lk.setLkm_gender("girl");
            lk.setLkm_phone("1314");
            
       //级联添加 ct.getSetLinkMan().add(lk); lk.setCustomer(ct); session.save(ct); session.save(lk);  
    //简单代码
    ct.getSetLinkMan().add(lk);
    
            session.save(ct);
    //删除代码
    Customer ct = session.get(Customer.class, 3);
            session.delete(ct);
//更新多的一方外键
Customer bd = session.get(Customer.class, 1); LinkMan man = session.get(LinkMan.class, 4); bd.getSetLinkMan().add(man); man.setCustomer(bd);

性能问题

重复执行两次

解决办法:设置inverse=true 

 

只操作一次

 

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
    
   <hibernate-mapping>
           
   <class name="cn.itcast.manytomany.User" table="user">

           <id name="user_id" column="user_id">               
                <generator class="native"/>
           </id>
           
           <!-- 3.配置其他属性和表对应 -->
        <!-- 不需要再配ID 重要 重复定义!!。。。。 -->
           <property name="user_name" column="user_name"></property>
           <property name="user_password" column="user_password"></property>
           <!-- set name值是角色set集合名
               table值:第三张表表名
            -->
           <set name="setRole" table="user_role" cascade="save-update">
               <!-- key column  第三张表外键名-->
               <key column="userid"></key>
               <!-- class:角色实体类全路径
                   column:角色在第三张表外键名
                -->
               <many-to-many class="cn.itcast.manytomany.Role" column="roleid" ></many-to-many>
           </set>
           
   </class>
   
   </hibernate-mapping> 
  
       
  //插入
       user1.getSetRole().add(role1); user1.getSetRole().add(role2); user2.getSetRole().add(role2); user2.getSetRole().add(role3); session.save(user1); session.save(user2);

 

 

 

       User user =session.get(User.class, 1);
            Role role =session.get(Role.class, 3);
            //让用户拥有角色
            //user.getSetRole().add(role);
            //让用户没有角色
            user.getSetRole().remove(role);

 

posted on 2018-03-14 00:43  投笔从码  阅读(98)  评论(0)    收藏  举报

导航