当设置了级联保存更新属性时,NHibernate 会不必要地更新对象吗?

Posted

技术标签:

【中文标题】当设置了级联保存更新属性时,NHibernate 会不必要地更新对象吗?【英文标题】:Will NHibernate unnecessarily update objects when the cascade save-update attribute is set? 【发布时间】:2012-05-24 00:43:52 【问题描述】:

This SO question 解释 NHibernate 中级联属性的保存更新选项如下:

save-update - 当对象被保存/更新时,检查关联并保存/更新任何需要它的对象(包括保存/更新多对多场景中的关联)。

这是否意味着当关联对象触发数据库操作时,NHibernate 会跟踪已修改并需要在数据库中更新的对象,或者 NHibernate 会简单地更新每个人,而不管对他们进行了哪些修改?

我正在尝试找出该句子“需要” 词的确切含义。

谢谢!

【问题讨论】:

【参考方案1】:

NHibernate 总是 跟踪修改过的对象;这与级联无关。

需要在这个上下文中基本上意味着当引用对象被保存/更新时,被引用的瞬态对象将被保存。

【讨论】:

我已经配置了 NHibernate 来显示它的 SQL 输出,当所有事情都在单个 Session 中完成时,它确实表现得如你所说,但在我的测试中 NHibernate 没有跨会话跟踪修改的对象,并为每个人发出不必要的 SQL 更新命令! 好吧,它当然不会跨会话跟踪。这不是它的设计方式。会话是工作单元支持将对象重新附加到不同的会话,但这不是理想的工作流程。

以上是关于当设置了级联保存更新属性时,NHibernate 会不必要地更新对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

React 16:componentDidUpdate 警告:安排了级联更新

使用 NHibernate 进行级联更新一对多

Fluent nHibernate 保存或更新派生实体

sql server 级联更新 急急急!

使用 Fluent NHibernate AutoMapping 进行级联保存

Hibernate Cascade