栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate级联删除对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate级联删除对象

我对cascade =“ delete”的工作方式有些困惑(…)

级联

delete
操作意味着,如果您
delete
是父母,则该操作将沿关联传播。因此,在您的情况下,删除
City
实体应传播到
Client

因此,当我运行(…)时,也应该删除所有客户端

Session#delete(String)
方法接受 HQL查询字符串 ,执行该 字符串
,遍历结果,并按
Session#delete(Object)
级联方式调用每个对象(因此,如果您的查询实际上是HQL查询,则客户端将被删除)。

但是此方法很旧,并且在Hibernate 3中已弃用(并移至“经典”

Session
界面),我并不建议这样做(它执行1 +N操作,删除大量结果效率很低)。

如果这是一个问题,请使用Hibernate提供的 批量删除 支持:

int deleteCount = session.createQuery("delete from Foo where bar = :bar")     .setParameter("bar", bar);    .executeUpdate()

但是请注意,批量删除有一些限制:

  • 您不能使用别名。
  • 查询中没有内部联接(尽管您可以在where子句中使用子选择)。
  • 一个 批量删除不级联 (而不会照顾连接的表)。

因此,使用批量删除功能,您必须删除

Client
之前的
City
。但是性能要好得多。

PS:您需要

commit()
在某个时候进行(并改善错误处理,即
rollback()
在catch块中)

参考文献

  • Hibernate Core参考指南
    • 14.4。DML风格的操作


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379848.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号