首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Hibernate多对一和多对一的修改有关问题

2012-11-26 
Hibernate多对一和多对一的修改问题Hibernate多对一和多对一的修改问题Hibernate的实体类映射文件存在多对

Hibernate多对一和多对一的修改问题

Hibernate多对一和多对一的修改问题

Hibernate的实体类映射文件存在多对一的情况下:

比如  客房—客房类型 就属于多对一的类型

如果在 money-to-one中设置了update=”false”的话,在需要更新客房的客房类型时,是不会更新成功的,其他属性是可以更新的,但是客房中的客房类型这个外键不会被更新

Room.hbm.xml文件

<hibernate-mappingpackage="entity">  

    <classname="Room">

       <idname="roomId">

            <generatorclass="native"/>

       </id>

       <propertyname="brand"/>

       <propertyname="state"/>

       <propertyname="floor"/>

       <propertyname="goodPrice"/>

       <!-- fetch设置级联查询,查询语句使用级联查询 --> 

       <many-to-onename="roomType"column="typeid"lazy="false"fetch="join"update=”false”></many-to-one>

       <!-- 客房对应图片的一对多关系 -->

       <setname="pics"lazy="false"cascade="none">

         <keycolumn="rmId"/>       <!--//指定副表的外键   -->

         <one-to-manyclass="Pic"/>  <!--//指定副表的类   -->

       </set> 

      </class>

</hibernate-mapping>

所以不能在money-to-one中设置update=“false”属性

上面Room.hbm.xml文件中还存在另外一种关系,

客房-客房图片是一对多的关系

我在设计实体类映射文件的时候加上了这个多对一的属性,在以后查询到客房信息的时候就连客房图片一起加载出来,会比较方便一点

在修改客房信息的时候,并没有对客房图片进行操作,但是客房图片中保存的客房的外键会自动被置空,就是对客房操作时影响到客房图片表了

如下面:在一对多关心中加上inverse=“true”属性就不会产生这种影响了

<!-- 客房对应图片的一对多关系 -->

       <setname="pics"lazy="false"cascade="delete"inverse="true">  

         <keycolumn="rmId"/>       <!--//指定副表的外键   -->

         <one-to-manyclass="Pic"/>  <!--//指定副表的类   -->

       </set>

inverse是否放弃维护关联关系”(在Java里两个对象产生关联时,对数据库表的影响),在one-to-many和many-to-many的集合定义中使用,inverse=”true”表示该对象不维护关联关系;该属性的值一般在使用有序集合时设置成false(注意hibernate的缺省值是false)。

   one-to-many维护关联关系就是更新外键。many-to-many维护关联关系就是在中间表增减记录。

   注: 配置成one-to-one的对象不维护关联关系

热点排行