SSH之 配置表与表之间的关系

配置多对一的关系时拿emp(员工)多表和dept(部门表)一举例:
1、在emp()中配置dept的属性
class emp{
   private Dept dept;
}
2、在emp映射表 emp.hbm.xml中定义<many-to-one>元素,表示参照关系
<many-to-one name="dept" class="Dept" column="dept_id">
<many-to-one>有延迟加载和非延迟加载,这关乎到sql语句执行一条还是两条。
建议使用<many-to-one lazy="proxy" fetch="joint">这样表示延迟加载并且sql语句合并。
配置一对多的关系时拿order(订单)一和item(订单明细)多举例:
1、在order中配置items属性
class order{
    Set<Item> items;
}
2、在配置文件(order.hbm.xml)中配置订单详情的基本信息
<set name="items" fetch="joint" inverse="true" lazy="false">
      <key column="order_id" casecade="all-delete-orphan"/>//级联删除,更新,查询等……
      <one-to-many class="Item"/>
  </set>
  如果想获取订单中有几条记录,可以在order.hbm.xml中加入这样的配置信息
  <properties name="itemnum" type="integer" formula="(select count(*) from tbl_order o where o.itemid=tid)">
  配置多对多关系时拿学生student和成就souce表举例:<many-to-many>
  1、基本配置
  在对象中,定义另一方对象的集合属性
  class student {
     private Set<souce> souces;
  }
  class souce{
     private Set<student> students;
  }
  在student.hbm.xml中配置如下:
  <set name="souces" table="tbl_souce">
     <key column="student_id">
     <many-to-many class="Souce" column="souce_id">
  </set>
  继承关系映射配置:
  1、继承关系映射到多表:
   class Product;
   clss Book extends Product;
   class Computer extends Product;
   t_product(t_id);
   t_book(t_product_id);
   t_computer(t_product_id);
   配置:
   <class>
       ...
     <joined-subclass name="" table="">
         <key column="" name="t_product_id"/>
         <property .../>
     </joined-subclass>
   </class>
   2、继承关系映射到一张表:
   class Question;
   class ChoiceQuestion extends Question;
   class EssayQuestion extends Question;
   
   t_question(t_id,t_type,....);
   配置:
   <class name="Question" ...>
     <discriminator type="string" column="t_type" />
       <subclass name="ChoiceQuestion" discriminator-value="c">
          <property name=""></property>
       </subclass>
       <subclass name="EssayQuestion" discriminator-value="e">
            <property name=""></property>
       </subclass>
  </class>
  
  one-to-many(list)
  有这样的需求,一个队伍(team)里有很多队员(person) 要求我们有顺序的列出队员
  class team{
     private List<Person> persons;
  }
  class person{
  }
  t_team(t_id,...,)
  t_person(p_id,t_team_id,t_turn,...,)
  在team.hbm.xml中加入:
  <list name="persons" cascade="all" >
    <key column="t_team_id" ></key>
    <list-index column="t_turn" base="0"></list-index>
    <one-to-many class="Person"/>
  </list>


 注:它和Set的<one-to-many>一样,但是list中不需要inverse="true".如果出现暂态异常,则在多的一方反向关联少的
 一方,即在多的一方加入 private team t;提供get set方法,然后修改配置文件信息
 映射 Component
 <component name="address" class="Address">
    <property name="street" type="string"></property>
    <property name="city" type="string"></property>
 </component>

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只飞飞啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值