读书人

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

发布时间: 2012-11-26 11:48:50 作者: rapoo

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的对象不维护关联关系

读书人网 >Web前端

热点推荐