初入Hibernate框架

初入Hibernate框架<三>

多表级联问题:

将外键操作也配置进框架:
级联,1方更新,被关联的数据也更新
删除1方,被关联的数据都删除

1、cascade级联操作

所谓cascade,如果有两个表,在更新一方的时候,可以根据对象之间的关联关系,对被关联方进行相应的更新。比如说院系表和学生表之间是一对多关系,使用cascade, 如删除院系表中的一条院系记录时,该院系下的所有学生记录也自动删除。这种现象称为级联删除。当创建一个新的院系实例,该院系实例集合属性中保存有学生。当该院系实例持久化时,自动将集合学生也自动添加到数据库的学生表中去。这称为级联增加。

在前面的基础上,用学生与部门表来演示:

//Student.hbm.xml中的<class name="Student" table="students" catalog="hib">属性中添加:
    <many-to-one name="dept" class="Dept" fetch="select">
            <!-- 配置表中的外键 -->
           <column name="deptId" length="8"></column>
        </many-to-one>
//Student.hbm.xml中与Student映射并列:
<class name="Dept" table="depts" catalog="hib">
       <id name="id" type="java.lang.String">
            <column name="id" length="8"></column>
            <generator class="assigned"></generator>
       </id>
       <property name="name" type="java.lang.String">
            <column name="name" length="40"></column>
       </property>
       <!-- cascade="all"对所有进行关联操作 -->
       <set name="students" table="students" inverse="true" cascade="all">
            <key>
                <column name="deptId"></column><!-- 配置外键字段 -->
            </key>
            <one-to-many class="Student"/>
       </set>

    </class>

这里也可以在写一个xxx.hbm.xml,然后在src/hibernate.cfg.xml文件中配置

延时加载:

(1) 属性的延迟加载

   如Person表有一个人员图片字段(对应java.sql.Clob类型)属于大数据对象,当我们加载该对象时,我们不得不每一次都要加载这个字段,而不论我们是否真的需要它,而且这种大数据对象的读取本身会带来很大的性能开销。我们可以如下配置我们的实体类的映射文件:

在xxx.hbm.xml配置文件中,

<hibernate-mapping>
 <class name="bean.Person" table="person">
      ……
  <property name="pimage" type="java.sql.Clob" 
                         column="pimage" lazy="true"/>
 </class>
 </hibernate-mapping>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章