hibernate第三次教程

hibernate第三节
1.为什么有关系映射?
1、是OO里面的关联概念和R里面的关联概念不匹配,才出现的关联。
2、操作一个对象时,相关联的对象也一起进行操作。
2.单向关联
s

1、当执行save(order)方法时会触发hibernate事件,找到CarOrder.hbm.xml映射文件
2、找到<many-to-one name="salesman" class="org.lyyf.pojo.Salesman" cascade="all">

           </many-to-one>
3、如果设置cascade属性,则又触发了Salesman.hbm.xml,则先录入salesman,在录入order
    order时主控方,而salesman是关联一方(数据库外键)
    关系表里面的数据是主控方的录入的(由多这方维护关系表)
3.双向关联

s
1、当执行save(man时会触发hibernate事件,找到Salesnab.hbm.xml映射文件;
2、找到 <set name="carOrder" cascade="all" inverse="false">
<key column="sid"></key>
<one-to-many class="org.lyyf.pojo.CarOrder"/>
</set>
inverse的作用:在hibernate中是通过inverse的设置来决定是有谁来维护表和表之间的关系的。
3、如果设置cascade属性,并且inverse="false",则由自己负责维护关系表的关系
    如果没有设置cascade属性,则不论如何都不维护关系表的关系;
    如果设置cascade属性,并且inverse="true",则由对方去负责维护关系表的关系,触发对方的

映射文件;
  cascade 有五个选项 分别是:all ,delete ,none,save-update,delete-orphan ;   
1.all : 所有情况下均进行关联操作。   none:所有情况下均不进行关联操作。这是默认值。   
2.save-update:在执行save/update/saveOrUpdate时进行关联操作。   
3.delete:在执行delete时进行关联操作。   
4.delete-orphan: 当save/update/saveOrUpdate时,相当于save-update ;当删除操作时,

相当于delete ;
Salesman是主控方,而 CarOrder是关联一方(数据库外键);

4.多对一关系映射总结
对于多对一关系映射设置<many-to-one>属性应该注意一下几点:
1、多对一方的cascade属性,应设置成save-update;
2、一对一方的cascade属性,应设置成delete;
3、一对一方的inverse属性,应设成true说明同步数据库根据carorder来,否则会多出很多update语句;
4、对于设置了关联的例子,保存时应把所有多方的对象都保存一次,这样才能保证数据库的数据和关系与对

象模型相匹配;