日期:2014-05-19  浏览次数:20753 次

关于hibernate一对多修改问题
关系原型是这样的:酒店的客房和客房图片的关系 我在客房实体类的struts_room.xml的配置文件中设置了一对多的关系映射,这样设计的初衷是想在取到客房的同时直接将所有客房对应的客房图片也取出来,我没有在客房图片实体类的struts_roompic.xml中设置多对一的关系 具体配置如下:
struts_room.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"/>
       <!-- 客房对应图片的一对多关系 -->
       <set name="pics" lazy="false">  
         <key column="rmId"/>        <!--//指定副表的外键   -->
         <one-to-many class="Pic"/>   <!--//指定副表的类   -->
       </set>  
      </class>
</hibernate-mapping>
struts_roompic.xml文件配置如下:
<hibernate-mapping package="entity">
<class name="Pic">
<id name="picId">
            <generator class="native"/>
</id>
<property name="rmId"/>
<property name="picUrl"/>
<property name="isDefault"/>
</class>
</hibernate-mapping>

问题出现在我修改客房信息的时候,我并没有对图片表进行操作,但是被修改了信息的客房对应在图片表中的图片的客房ID也就是上面xml文件中配置的 rmId 被置空了,但是其他数据没有被修改,只是图片对应的客房这个外键被置空了,我没有设置级联啥的,但是就是出现了这种状况,不知道有高手知道原因否,真心请教
------最佳解决方案--------------------
还有一对多的时候 最后设置inverse="true"
------其他解决方案--------------------
lazy属性
------其他解决方案--------------------
 lazy="false"
------其他解决方案--------------------
引用:
还有一对多的时候 最后设置inverse="true"

我试了下,确实图片表不会再受到影响了,谢了