NHibernate Definitive Cascade 应用指南

2024-03-19

是否有任何互联网资源对 NHibernate 的所有级联设置提供明确的指南,其中包括类结构、HBM 以及每个级联设置的操作对与 NH 的所有关系的影响的示例。

此外,如果有以最正确的方式完成常见关联的示例,例如设置一个状态表,您将永远不会最终级联删除状态,或者删除具有 CreatedBy User 属性的对象将很有帮助。永远不会最终以级联等方式删除用户。


以下内容改编自Java Hibernate参考http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/objectstate.html#objectstate-transitive http://docs.jboss.org/hibernate/stable/core/manual/en-US/html/objectstate.html#objectstate-transitive对于NHiberate 3.0(即当前的svn trunk)。

对于 NHibernate Session 的每个基本操作 - 包括 Persist()、Merge()、SaveOrUpdate()、Delete()、Lock()、Refresh()、Evict()、Replicate() - 都有相应的级联样式。级联样式分别命名为 persist、merge、save-update、delete、lock、refresh、evict、replicate。 Save()和Update()的级联风格是save-update;对于 SaveAndUpdateCopy() 来说,它是合并;对于 PersistOnFlush() 来说,它是持久的。而remove是delete的别名。

如果您希望操作沿着关联级联,则必须在映射文档中指出。例如:

<one-to-one name="person" cascade="persist"/>

级联样式可以组合:

<one-to-one name="person" cascade="persist,delete,lock"/>

您可以使用cascade="all" 指定所有操作都应沿着关联级联。默认的cascade=“none”指定不级联任何操作。

一种特殊的级联样式,delete-orphan,仅适用于一对多关联,并指示应将Delete() 操作应用于从关联中删除的任何子对象。 all-delete-orphan 与 all,delete-orphan 相同。

建议:

  • 关联上启用级联通常没有意义。级联对于和关联通常很有用。
  • 如果子对象的生命周期受父对象生命周期的限制,则通过指定cascade="all-delete-orphan"使其成为生命周期对象。
  • 否则,您可能根本不需要级联。但是,如果您认为您经常在同一个事务中与父级和子级一起工作,并且您想节省一些打字时间,请考虑使用cascade="persist,merge,save-update"。

使用cascade="all"映射关联(单值关联或集合)将关联标记为父/子样式关系,其中父项的保存/更新/删除会导致子项的保存/更新/删除,或者孩子们。父级未引用的子级不会自动删除,除非是使用cascade="delete-orphan"映射的关联。父子关系的级联操作的精确语义如下:

  • 如果将父级传递给 Persist(),则所有子级都会传递给 Persist()
  • 如果将父级传递给 Merge(),则所有子级都会传递给 Merge()
  • 如果将父级传递给 Save()、Update() 或 SaveOrUpdate(),则所有子级都会传递给 SaveOrUpdate()
  • 如果持久父级引用瞬态或分离的子级,则会将其传递给 SaveOrUpdate()
  • 如果父级被删除,所有子级都会传递给Delete()
  • 如果持久父级取消引用子级,则不会发生任何特殊情况 - 应用程序应在必要时显式删除子级 - 除非cascade =“delete-orphan”,在这种情况下,“孤立”子级将被删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate Definitive Cascade 应用指南 的相关文章

随机推荐

  • Boost.Asio安装问题

    我已经使用 bjam install 安装了 boost 库 但是当我编译程序时 include boost asio hpp int main return 0 出现此类错误 tmp ccVR3eeF o In function stat
  • 虚拟化页表的工作原理

    阅读有关虚拟化页表概念的内容 其中部分页表放入虚拟内存中 维基百科 https en wikipedia org wiki Page table Virtualized page table以及 Patterson 和 Hennessy 页
  • ExecutorService,如何等待所有任务完成

    等待所有任务的最简单方法是什么ExecutorService完成 我的任务主要是计算 所以我只想运行大量作业 每个核心一个 现在我的设置如下所示 ExecutorService es Executors newFixedThreadPool
  • 如何将 NSDate 对象设置为午夜?

    我有一个NSDate对象 我想将其设置为任意时间 例如午夜 以便我可以使用timeIntervalSince1970一致检索数据的功能 无需担心时间when对象已创建 我尝试过使用NSCalendar并使用一些 Objective C 方法
  • 同构弦

    给定两个字符串 s 和 t 确定它们是否同构 如果 s 中的字符可以替换得到 t 则两个字符串是同构的 所有出现的字符都必须替换为另一个字符 同时保留字符的顺序 任何两个字符都不能映射到同一个字符 但一个字符可以映射到其自身 例如 给定 e
  • 如何在magento中调用另一个动作?

    是否可以在magento中调用另一个动作 例如 让我们考虑两种操作方法 添加动作 更新操作 调用 addAction 时是否可以实际调用 updateAction 谢谢 巴兰 您可以进行转发 例如 public function addAc
  • Objective-C 中的自动解析库 - [自动 XML/JSON 到对象转换]

    Objective C 中是否有一个我可以在 iPhone 中使用的库 在其中我可以提前告诉库这些标签应该在 xml 文件中出现 然后该库会自动为我解析它并给我一个 NSDictionary 数组作为回报或类似的东西 简而言之 我正在寻找一
  • 为什么本机 python 列表上的 for 循环比 numpy 数组上的 for 循环更快

    我正在阅读介绍 numpy 的章节高性能Python并在我自己的计算机上使用了代码 我无意中用 for 循环运行了 numpy 版本 发现与本机 python 循环相比 结果出奇地慢 代码的简化版本如下 其中我定义了一个值为 0 的二维数组
  • 如何使用 Chrome 扩展程序阻止某些网站?

    我正在为一个项目制作一个简单的 chrome 扩展 我正在制作一个扩展程序来阻止某些 URL 社交媒体等 以使学习更加高效 我不太擅长JS 但我想学习 我有一些想法 也许它可以阻止网站 或者只是在 div 中绘制一些内容来阻止其内容 另外
  • 如何设置PDF页眉的高度?

    有谁知道如何设置生成的pdf中标题的高度
  • x64应用程序访问mdb数据库

    我有一个应用程序需要在x64平台下构建 我需要访问 mdb文件 我所说的访问是指插入 删除或更新数据库 我在使用 Jet OLE db 和 ODBC 驱动程序时遇到问题 对于 OLE db 它显示 Jet Oledb 未注册 驱动程序和应用
  • Haskell 的全功能 CSV 解析器?

    任何人都可以推荐一种解析 CSV 文件的方法 其中包含以下选项 设置单元格 字段分隔符 设置记录结尾 行终止符 为字段设置引号字符 支持 UTF 8 字符串 能够将内存中的 CSV 结构写回文件 我确实尝试过 Text CSV 但它非常简单
  • D3 力向图添加新节点导致 x & y 为 NaN

    当我单击一个节点时 我希望向其中添加一个新节点 它们都应该有标签 我正在尝试构建同义词库可视化 我对 D3 还很陌生 所以如果您需要更详细地解释一些事情 我深表歉意 到目前为止 这是我的代码 var width 960 var height
  • 如何防止在 C# 中手动输入组合框

    我有一个 C 表单 它使用ComboBox 如何防止用户手动输入文本ComboBox in C this comboBoxType Font new System Drawing Font Arial 15 75F this comboBo
  • 未调用 UIManagedDocument saveToURL finishHandler - 错误消息:“不允许读者访问该 URL。”

    我有一个旧的应用程序使用UIManagedDocument与核心数据交互 然而 在 iOS 11 2 可能还有更早的 iOS 11 版本 上saveToURL forSaveOperation completionHandler 方法似乎已
  • 将文件扩展名与程序关联

    我知道怎么做 而且我去过http www codeproject com KB vb VBFileAssociation aspx http www codeproject com KB vb VBFileAssociation aspx前
  • 在python中将pdf转换为docx格式

    请问如何将pdf转换为docx 我尝试使用 pdfminer 转换为 html 来提取文本 但看起来仍然不够好 pdf2docx 安装pdf2docx包点击here https github com dothinking pdf2docx
  • Dialogflow动态实体问题

    我正在尝试使用 Dialogflow api ai 创建一个 Actions on Google 应用程序 我需要获取火车状态 所以我的实体将是火车号码或火车名称 火车的名字有很多 所以我无法手动添加实体值 如何将实体值动态添加到控制台 您
  • Spring WebFlux Webclient 作为 Mono 接收应用程序/八位字节流文件

    我正在 Kotlin 中制作一个小型 Spring WebFlux 应用程序的原型 该应用程序需要从远程 REST 端点获取 tar 存档并将其存储在本地磁盘上 听起来很简单 我首先创建了一个集成测试 该测试启动 Spring 服务器和另一
  • NHibernate Definitive Cascade 应用指南

    是否有任何互联网资源对 NHibernate 的所有级联设置提供明确的指南 其中包括类结构 HBM 以及每个级联设置的操作对与 NH 的所有关系的影响的示例 此外 如果有以最正确的方式完成常见关联的示例 例如设置一个状态表 您将永远不会最终