`

Hibernate的delete笔记 (cascade属性值)

阅读更多
	Session session = HibernateUtil.openSession();

		Transaction tx = null;

		tx = session.beginTransaction();
		
		User user=(User) session.load(User.class, 564);
		
		session.delete(user);
		
		tx.commit();
		
		session.close();



<set name="orders" cascade="save-update" inverse="true" lazy="false"> 


由于一个user对应多个order, 这里user还有外联记录, 所以会报错。

ERROR: ORA-02292: 违反完整约束条件 (ALLENI.FK_QCPYHSS71C9CAMNA3X8K2Q0D9) - 已找到子记录

Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not execute statement


解决方法是吧User.hbm.xml配置文件的set的cascade属性修改成"delete"。

再次执行程序, hibernate会自动执行两个delete语句:
Hibernate: select user0_.id as id1_2_0_, user0_.test_name as test2_2_0_, user0_.test_age as test3_2_0_ from test_user user0_ where user0_.id=?
Hibernate: select orders0_.customer_id as customer3_2_1_, orders0_.id as id1_0_1_, orders0_.id as id1_0_0_, orders0_.test_name as test2_0_0_, orders0_.customer_id as customer3_0_0_ from test_order orders0_ where orders0_.customer_id=?
Hibernate: delete from test_order where id=?
Hibernate: delete from test_user where id=?



=============================
cascade可以有多种属性值, 如下图所示:



这里我们可以把属性值改成all, 这样一来, 不论是加入数据, 更新,还是删除, hibernate都会帮我们进行自动处理。



  • 大小: 135.7 KB
分享到:
评论

相关推荐

    Hibernate笔记.doc

    在处理一对多的关联关系时,`&lt;set&gt;`元素的`inverse`属性和`cascade`属性扮演着重要角色: 6. `&lt;set&gt;`元素的`inverse`属性:当设置为`true`时,用于优化性能,尤其是在双向关联的一对多关系中。它表示关联的维护责任...

    hibernate学习笔记

    ### Hibernate学习笔记:对象/关系数据库映射(二)——集合映射 #### 1. 集合映射概述 在对象/关系映射(ORM)领域中,Hibernate 是一个非常强大的工具,它能够帮助开发者高效地进行 Java 对象与数据库记录之间的...

    Hibernate_容器映射技术笔记

    在Hibernate中,级联删除可以通过配置`&lt;set&gt;`或其他集合类型的标签实现,如`&lt;cascade&gt;`属性,但需要注意的是,直接使用Hibernate的`delete`方法可能会导致先查询再删除的过程,这并不高效。相比之下,使用HQL...

    hibernate配置笔记

    - `&lt;set name="items"cascade="all-delete-orphan" inverse="true"&gt;` 描述了`Order`类中名为`items`的集合属性与数据库表的关系。`cascade="all-delete-orphan"`表示当父对象被删除时,所有孤儿子对象也将被删除。`...

    Hibernate学习笔记

    - **更新操作**:通过加载对象、修改属性值、调用`session.update()`或`session.saveOrUpdate()`方法完成。 - **删除操作**:通过加载对象或根据ID加载对象,然后调用`session.delete()`方法实现。 #### 继承映射 -...

    hibernate-note学习笔记

    - **级联删除**(cascade delete): 删除一个对象时,同时删除其关联对象。 #### 六、并发控制 - **悲观锁**: 在操作数据前加锁,直到操作完成后再释放锁。 - **乐观锁**: 不直接锁定数据,在提交更改前检查数据是否...

    hibernate 中HQL语句查询学习笔记

    ### Hibernate中HQL语句查询学习笔记 #### HQL基础 **HQL**(Hibernate Query Language)是Hibernate框架推荐使用的查询语言,它提供了一种面向对象的方式来查询数据库,支持多种复杂的查询操作,如继承、多态及...

Global site tag (gtag.js) - Google Analytics