能否确认条款'Save'在NHibernate术语中表示INSERT

本文关键字:术语 NHibernate 表示 INSERT Save 确认 | 更新日期: 2023-09-27 18:02:22

我是nhibernate的初学者,目前我正试图理解'级联'属性及其设置选项。

如果你熟悉Nhibernate,你已经知道cascade属性的一个设置选项是:"save-update"

并且它被解释为(在www.ayende.com站点):"当对象被保存/更新时,检查关联并保存/更新需要它的任何对象(包括保存/更新多对多场景中的关联)。"

你能确认在Nhibernate术语中SAVE代表SQL中的INSERT吗?您是否知道使用SAVE而不是INSERT有什么原因?

能否确认条款'Save'在NHibernate术语中表示INSERT

NHibernate的Save-Update适用于UPDATEINSERT SQL语句。

级联选项涉及到NHibernate在保存一个实体时应该如何处理其他相关实体。正如Ayende在那篇文章中所写的

  • -不做任何级联,让用户自己处理
  • save - update -当对象被保存/更新时,检查关联并保存/更新任何需要它的对象(包括保存/更新多对多场景中的关联)。
  • Delete -删除对象时,删除该关联的所有对象。
  • delete - orphan -删除该对象时,删除该关联的所有对象。除此之外,当一个对象从关联中删除并且不与另一个对象(孤儿)关联时,也要删除它。
  • All -当一个对象是保存/更新/删除时,检查关联并保存/更新/删除所有找到的对象。
  • all - delete - orphan -当一个对象是保存/更新/删除时,检查关联并保存/更新/删除所有找到的对象。除此之外,当一个对象从关联中删除并且不与另一个对象(孤儿)关联时,也要删除它。

所以, save - update 基本上对NHibernate说,"当保存我的实体时,如果任何与实体相关的对象是暂时的(还没有持久化),那么持久化(保存)它们。"任何已经持久化的关联对象都将被更新。

之所以叫Save-Update,可能是因为它适用于Save()Update()SaveOrUpdate()

在Fabio Maulo的NHibernate文档中,第9.9章讨论了生活方式和对象图:

NHibernate没有完全实现"可达性持久化",这意味着(低效的)持久的垃圾收集。然而,由于流行的需求,NHibernate确实支持实体在被另一个持久化对象引用时成为持久化对象对象。标记为cascade="save-update"的关联以这种方式运行。如果您希望在整个应用程序中使用这种方法,那么它是属性的default-cascade属性更容易指定

元素。

Save不等同于insert,尽管在大多数应用程序中调用Save会导致一个或多个insert。

Save使暂态对象持久化。Update使分离对象持久化。理解这些概念是有效使用NHibernate的关键。

cascade="save-update"表示在保存或更新该实体时,还未持久的引用实体也将被保存。

如果没有这个属性,NHibernate会在刷新的时候告诉你这个实体是暂时的(除非你手动保存)