我是Hibernate新手,做了个1:1双向关联的实例,是Person和IdCard(身份证)的双向关联,映射问件如下:
  Person.hbm.xml的配置文件如下:
<hibernate-mapping  package="cn.com.shxt.model">
    
      <class name="Person" table="Person_info">
         <id  name="id">
           <column name="person_id"></column>
              <generator class="foreign">
              <param name="property">idCard</param>
           </generator>
         </id>
         <property name="personName" not-null="true" ></property>
         <property name="sex"></property>
         <one-to-one name="idCard" class="IdCard" cascade="save-update" ></one-to-one> 
      </class>
</hibernate-mapping>  IdCard.hbm.xml文件配置如下:
  <hibernate-mapping  package="cn.com.shxt.model">
     <class name="IdCard" table="IdCard_info">
       
        <id name="id" column="idCard_id">
           <generator class="sequence">
              <param name="sequence">idcard_seq</param>
           </generator>
        </id>
        
        <property name="cardNumber" type="java.lang.Integer"  column="cardNumber" length="30"  unique="true"/>     
        <one-to-one name="person" cascade="save-update"  ></one-to-one>
     </class>
</hibernate-mapping>
  
    通过Person一方操作IdCard一方的增删改查都没有问题,但是通过IdCard获取持久化对象进行删除时就出现了“deleted object would be re-saved by cascade (remove deleted object from associations): [cn.com.shxt.model.IdCard#5]”异常,不知道怎么解决??求助高手!!非常感谢!!
  我的 测试文件:
    /*通过IdCard级联删除Person:删除关系模型*/
public void deleteIdCard(){
 IdCard idCard= (IdCard) session.get(IdCard.class,5);
 //解除级联关系
 idCard.setPerson(null);
 session.delete(idCard);
 session.beginTransaction().commit();
}

解决方案 »

  1.   

    是“级联”问题 ,和 inverse 控制权问题你用了俩个cascade="save-update" 出了问题, 
    对于表的操作控制权只能由 “一方”来管理,
    如果你设置  <one-to-one name="idCard" class="IdCard" inverse=“true"/>
    那么控制权就掌握在person方,person就能“修改 删除 插入”数据,而 card却不能。看谁能操作数据,关键在inverse