映射一对一共享主键 和唯一外键

  新人刚学这个,只是做个记录,写的不好请大家多多包含。

 

 /**
   * 一对一:共享主键        Student(学生表) Record(档案)
   *
   *  配置文件:Student.hbm.xml(学生表)
   *  <one-to-one name="record" class="hibernate.vo.Record"
   *  outer-join="true" cascade="delete"></one-to-one>
   *
   *  name:  这个属性是档案的的vo
   *  class: 指定name中的vo 是谁的(那个类)
   *  outer-join:  这个是让主表能用外连接。
   *  cascade: 级联删除 删除学生的时候就删除 档案
   * 
   * 配置文件:Record(档案表)
   *  <one-to-one name="student" class="Student" constrained="true"></one-to-one>
   *   <generator class="foreign">
         *    <param name="property">student</param>
         *  </generator>
   * name:对方的vo
   * class: class: 指定name中的vo 是谁的(那个类)
   * constrained: 这个属性是约束的意思,表示自己的约束必须和对方的标示符一致
   * generator 这个标签设置的是在id中设置 表示自己的主键 生成是根据对方的主键 (student)
   *
   *
   *
   *
   *
   *  在现实中的需求一般是 添加档案的时候是    添加档案的时候 同时添加 学生 
   *  在程序中这个是一对一的 的关系映射   需要在 Record 添加一个属性 cascade="save-update" 这个就
   *  代表 你添加的时候 级联添加! 同时你也要在程序中去关联学生 就是在vo中要设置 这个档案是给那个学生
   *  如果不关联 就会出现以下的异常
   * 
   *   org.hibernate.PropertyValueException:
   *   not-null property references
   *   a null or transient value: hibernate.vo.Record.student
   *   注意:在关联的时候  一定要 档案去关联学生。
   *   如果是学生关联了档案! 也会抛出以上的异常
   *  
   *   如果想添加学生的时候 同时添加档案:
   *   那就需要在学生这边设置级联 保存和更新 cascade="save-update"
   *   这个地方需要注意的是: 如果你想添加学生的时候也要添加档案的话, 那必要要关联双方。不然会出现以下异常:
   *   not-null property references a
   *   null or transient value: hibernate.vo.Record.student
   *   (这个异常的意思是  :无效的属性引用)
   *  
   *   在学生那边建议就设置一个删除的级联。 因为 表面上  显示的是 一对一,
   *   但是实际他们的关系还是有一个主导者    这样删除的时候会级联删除学生的档案!
   *   同时在设置级联更新和添加的时候还是放在 档案表这边!
   *  
   *  
   *   唯一外键:
   *   只需要改变配置文件  student(学生表) Record(档案表)
   *     
   *      <many-to-one name="student" class="Student" unique="true" cascade="save-update">
   *      <column name="student_id"></column>
   *       </many-to-one>
   *       unique :保证外键的唯一性和对方主键的值一致
   *      
   *               <one-to-one name="record" class="hibernate.vo.Record"
   *                cascade="delete" property-ref="student"></one-to-one>
   *       property: 这个是因为唯一外键关联映射中两个实体采用record 表中的student_id 外键维护关联关系
   *  
   *  
   *  
   *  
   */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值