hibernate 级联删除 hibernate级联
程序员文章站
2022-05-06 22:45:26
...
一个Customer中有多个Order
Customer.hbm.xml:
<hibernate-mapping> <class name="com.demo.hibernate.model.Customer" table="CUSTOMER"> <id name="id" type ="java.lang.Integer" column="CID"> <generator class="increment" /> </id> <property name="username" column="USERNAME" /> <property name="password" column="PASSWORD" /> <set name="order" table="ordertt" inverse="false" cascade="all"> <key column="CID"/> <one-to-many class="com.demo.hibernate.model.Order"/> </set> </class> </hibernate-mapping>
Order.hbm.xml:
<hibernate-mapping> <class name="com.demo.hibernate.model.Order" table="ORDERTT"> <id name="orderId" type ="java.lang.Integer" column="orderId" unsaved-value="0"> <generator class="increment" /> </id> <property name="id" column="CID" /> <property name="orderName" column="orderName" /> </class> </hibernate-mapping>
1.在hibernate中设置级联关系是通过cascade进行设定:
all : 所有操作都传递到相关联的对象
save-update 保存和更新传递到相关联的对象
delete 删除操作传递到相关联的对象
delete-orphan : 所有操作都传递到相关联的对象 并删除不再与父对象关联的对象。
2.配置表关联时,需注意inverse这个属性,有true和false两种值,表示数据表由谁进行进行操作,
若是inverse="true"表示子表由子表本身维护
若是inverse="false"表示子表由主表维护。
在级联插入时,由于只对主表进行操作,子表没有操作,要想order能够顺利插入ordertt表中,
就需要将inverse="false"。若是inverse="true",子表也能插入数据,但是两者关联的CID没有数据跟新
当设置为 inverse="false" cascade="all" 时,进行插入操作时,如果子表已经存在相同的记录,则将原记录update,会把相关id设置为空,则再插入记录
当设置为 inverse="true" cascade="all" 时,则没有update的情况
上一篇: 不同人群的暖胃方法 孕妇吃蔬菜养胃
下一篇: 未来的我,你好