Hibernate 级联删除对象

2023-11-24

我对cascade =“delete”的工作原理有点困惑。我在城市映射文件中按以下方式定义了映射:

<set inverse="true" name="client" cascade="delete">
  <key>
    <column name="id_name"/>
  </key>
    <one-to-many class="model.Client"/>
 </set>

Client 类有 City 类的外键。

所以当我跑步时:

List object = null;
try {
   org.hibernate.Transaction tx = session.beginTransaction();
   try {
       session.delete("from City where row_id=" + row_id and table_id = " + table_id);
   } catch (Exception e) {
       e.printStackTrace();
   }
}

所有客户端都应该被删除还是我必须以某种方式处理它?我是否将查询作为方法参数正确传递给会话的 delete() 方法?谢谢你的帮助。 此致, 粗鲁。


我对cascade =“delete”的工作原理有点困惑(...)

级联一个delete操作意味着如果您delete父级,操作将沿着关联传播。所以在你的情况下,删除City实体应该传播到Clients.

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

The 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 子句中使用子选择)。
  • A 批量删除不级联(并且不会处理连接表)。

因此,通过批量删除,您必须删除Client之前City。但表演要好得多。

PS:你需要commit()在某些时候(并且还可以改进您的错误处理,即rollback()在 catch 块中)

参考

  • Hibernate Core Reference Guide
    • 14.4. DML 风格的操作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate 级联删除对象 的相关文章

随机推荐

  • 图片未显示在推送通知中

    我正在使用下面的通知有效负载并使用 Postman 向 Android 设备发送推送通知 to topics xxxx data url https res cloudinary com demo image upload w 200 la
  • 未找到 ClientBuilder 类

    我正在尝试使用 Jersey 框架构建 RESTFul 客户端 因此我添加了以下类 import javax ws rs client Client import javax ws rs client ClientBuilder publi
  • “不是 git 存储库”

    我正在尝试使用一个使用 git 作为后备存储的程序 我是 git 的新手 在初始化时 该程序执行以下操作 git bare rev parse refs heads index 结果是 fatal Not a git repository
  • 快速更新约束

    我将约束添加到我的创建的按钮中UIView func CreateButtonWithIndex index Int newButton setTranslatesAutoresizingMaskIntoConstraints false
  • 将 C++ 对象添加到 Objective-C 类

    我正在尝试混合 C 和 Objective C 我已经完成了大部分工作 但希望在 Objective C 和 C 代码之间有一个接口类 因此我想在 ViewController 接口中有一个持久的 C 对象 由于禁止声明没有类型的 myCp
  • 安装magento,数据库连接错误。

    我正在尝试将 magento 安装到我的 web 主机上 在安装过程中我收到 数据库连接错误 我已正确输入所有值 已联系我的 web 主机以确保我此时陷入困境 他们说参考 magento 论坛额外的支持 我找不到修复方法 任何想法 帮助将不
  • 使用 ggplot2 仅将线段添加到一个方面

    作为一个例子 我有这个数据框 称为my data Groups FactorA FactorB FactorC N value sd se ci 1 Control Condition1 Condition1 Condition1 3 92
  • JPA - 在 persist() 之后返回自动生成的 id

    我正在使用 JPA EclipseLink 和 Spring 假设我有一个带有自动生成 ID 的简单实体 Entity public class ABC implements Serializable Id GeneratedValue s
  • 不使用 Qt 运行 .EXE

    Solution 我想运行我创建的应用程序QtSDK在没有的机器上Qt安装 我尝试复制DLL s来自BIN文件夹到我的项目的发布中 但它不起作用 我尝试了以下方法 我全部复制dll s folder d Qt Qt5 0 1 5 0 1 m
  • 我想在单独的 php 文件上运行 wp_query 以进行 ajax 调用

    例如 ul class thumbs li class li ul
  • 图像标题和换行

    在图像下方添加标题的最佳方法是什么 图像及其标题将向右浮动 并且标题上的文本需要换行 200x200px 的图像不应具有宽度为 800px 的标题 我强烈希望有一个解决方案能够让我在不更改 CSS 或标记的情况下更新图像 具有不同的宽度 由
  • 尝试从 ReadStream 读取时接收错误 Domain=kCFErrorDomainCFNetwork Code=2

    我正在尝试同步读取CFReadStream反对创建者CFStreamCreatePairWithSocketToHost 流打开得很好 但是当我尝试调用时CFReadStreamRead在循环中 CFReadStreamRead 返回 1
  • 使用 Chrome 时的 Selenium“selenium.common.exceptions.NoSuchElementException”

    我正在尝试玩QWOP在 Chrome 上使用 Selenium 但我不断收到以下错误 selenium common exceptions NoSuchElementException Message no such element Una
  • Android 扩展中的实验性功能有利于生产发布

    我正在使用 Parcelize使用 Kotlin 语言进行 Android 开发的功能 为了使用它们 我在 build gradle 文件中进行了以下修改 apply plugin kotlin android extensions the
  • 对字符串数组列表进行排序 C#

    我有一个字符串数组列表 其中数组的格式为 动物 品种 名称 Dog Golden Retriever Rex Cat Tabby Boblawblah Fish Clown Nemo Dog Pug Daisy Cat Siemese We
  • 如何将另一个项目 (Dll) 中的 UserControl 添加到我的 WPF 解决方案中?

    所以 一切都在标题中 我只想在我的 WPF 窗口中添加一个 UserControl 它看起来很简单 但 UserControl 位于同一解决方案的另一个项目 Dll 项目 中 我就是无法参考它 所以 我最好的尝试是这样的
  • 使用 By() 计算变化百分比

    我是一个没有经验的 R 用户 一直在努力使用 By 函数 非常感谢您的帮助 任务很简单 我有一个纵向数据集 如何声明一个 需要通过 ID 计算不同的指标 其中一个指标是简单的百分比变化 需要滞后 示例如下 ID Date Temp Chan
  • 如何在放大弹出插件中的弹出窗口中打开弹出窗口

    谁能告诉我如何使用 magnific popup jquery 插件 使用 ajax 在弹出窗口中打开弹出窗口 ajax popup link magnificPopup type ajax a href path to file html
  • System.Collections.Generic.Dictionary = 终极性能?

    我正在编写 Haxe C 目标 并且一直在研究 Haxe 的 std 库的性能差异 以便我们可以通过其跨平台代码提供尽可能最佳的性能 哈希表代码就是一个很好的例子 我有点不愿意使用 NET 的字典 因为它看起来很庞大 由于内存对齐问题 键
  • Hibernate 级联删除对象

    我对cascade delete 的工作原理有点困惑 我在城市映射文件中按以下方式定义了映射