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还有外联记录, 所以会报错。

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

Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not execute statement[/color]

解决方法是吧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=?
[b]Hibernate: delete from test_order where id=?
Hibernate: delete from test_user where id=?[/b]


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

[img]http://dl2.iteye.com/upload/attachment/0091/2865/139d9c29-618f-3825-9642-32680c567938.jpg[/img]

这里我们可以把属性值改成all, 这样一来, 不论是加入数据, 更新,还是删除, hibernate都会帮我们进行自动处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值