我是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();
}
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();
}
对于表的操作控制权只能由 “一方”来管理,
如果你设置 <one-to-one name="idCard" class="IdCard" inverse=“true"/>
那么控制权就掌握在person方,person就能“修改 删除 插入”数据,而 card却不能。看谁能操作数据,关键在inverse