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

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

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

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

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

Room.hbm.xml文件

<hibernate-mapping package="entity">  

    <class name="Room">

       <id name="roomId">

            <generator class="native"/>

       </id>

       <property name="brand"/>

       <property name="state"/>

       <property name="floor"/>

       <property name="goodPrice"/>

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

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

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

       <set name="pics"lazy="false" cascade="none">

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

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

       </set> 

      </class>

</hibernate-mapping>

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

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

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

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

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

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

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

       <set name="pics"lazy="false" cascade="delete"inverse="true">  

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

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

       </set>

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值