Nhibernate 如何处理插入、更新、删除

Posted

技术标签:

【中文标题】Nhibernate 如何处理插入、更新、删除【英文标题】:How Nhibernate do with insert, update, delete 【发布时间】:2011-07-14 15:52:34 【问题描述】:

谁能解释 NHibernate 在以下情况下的行为:

    插入 更新 删除

如果 Parent/Child 集合带有 inverss - non inverse , cascadea ll, cascade all delete orphan.

我想知道执行上述每个案例的规则。

提前致谢

【问题讨论】:

【参考方案1】:

试试看这里:

NHibernate Cascades: the different between all, all-delete-orphans and save-update

或这里:

Nhibernate Cascade

也在这里:

NHibernate Definitive Cascade application guide

更新

这里你可以找到inverse的一个很好的解释:

Inverse Attribute in NHibernate

这些是级联差异:

    cascade="none",默认值,告诉 Hibernate 忽略关联。 cascade="save-update" 告诉 Hibernate 在 事务被提交并且当一个对象被传递给 save() 或 update() 并保存新实例化的瞬态实例并将更改持久保存到 分离的实例。 cascade="delete" 告诉 Hibernate 导航关联并删除持久性 将对象传递给 delete() 时的实例。 cascade="all" 表示同时级联保存更新和删除,以及 调用驱逐和锁定。 cascade="all-delete-orphan" 的含义与 cascade="all" 相同,但此外, Hibernate 删除任何已被移除的持久实体实例 (取消引用)来自关联(例如,来自集合)。 cascade="delete-orphan" Hibernate 将删除任何持久实体 已从关联中删除(取消引用)的实例(例如 例如,来自一个集合)。

【讨论】:

感谢 Danyolgiax 的链接,但我正在寻找有关 NHibernate 如何决定执行 sql 语句以及它如何安排它的一些知识。例如,如果我们有一对多关系或父/子集合,如果我们将其映射为反向或不映射,以及使用 Cascade All、CascadeAllDeleteOrphan 或没有级联,Nhibernate 在每种情况下将采取什么决定以及生成的 sql 语句的顺序。谢谢 请引用您的来源以了解级联差异。它们似乎来自 Hibernate in Action。 @fgb 我发现它在谷歌上搜索

以上是关于Nhibernate 如何处理插入、更新、删除的主要内容,如果未能解决你的问题,请参考以下文章

Delphi 用dbnavigator和dbgrid链接以后,使用dbnavigator控件的删除时会使程序崩溃,该如何处理

如何处理访问 SQL Server 数据库的应用程序的权限?

Grails + Acegi:如何处理密码更新?登录用户与未登录用户

构造准备好的语句时如何处理可选列

EF7 如何处理嵌套实体的更新操作

复杂的乐观更新:如何处理不仅仅是二进制元素