什么级联"刷新"在Doctrine2中意味着什么?它是实体更新操作吗?
更新
现在看来,如果更改类别名称,则将获取并更新所有相关产品。但是,由于通常实体仅通过id相关,因此没有意义获取所有产品,因为在子表中没有任何更新。 出于这个原因,我认为"刷新"类似于MySQL" ON UPDATE CASCADE" - 如果更改了父主键,则子值也将更改以反映该值。所以主义"刷新"操作仅在ORM级别相同。只有更新父母身份才有意义,对吗?
答案 0 :(得分:6)
您可以找到文档here,但总结一下,我会复制一些重点:
坚持,删除,分离,刷新和合并个人 实体可能会变得相当繁琐,特别是当高度时 涉及交织的对象图。因此,学说2提供了一个 通过级联这些传递持久性的机制 操作。每个关联到另一个实体或一个集合 实体可以配置为自动级联某些 操作。默认情况下,不会级联任何操作。
存在以下级联选项:
- persist:Cascades将操作持久保存到关联实体。
- 删除:级联删除对关联实体的操作。
- merge:Cascades将操作合并到关联实体。
- detach:Cascades将操作分离给相关实体。
- refresh:级联刷新对关联实体的操作。
复制所有部分是不必要的,因为每个人都可以打开链接,但是从这一部分可以清楚地了解级联的想法。
通过学说对关联做一些自动化的事情。
在refresh cascade
案例中,当您在@oneToMany
关联上定义此级联时,如果您在一侧执行collection
,则要求学说更多地刷新refresh
。
假设我们one-to-many
和Category
个实体之间存在Product
关联。如果您为此定义此级联,则每次在任何refresh
上调用Category
时,其Products Collection
都将刷新。{/ p>
关于这部分问题:是实体更新操作吗?是,在Refresh
这意味着从数据源中将集合和实体提取到内存中。
级联操作在内存中执行。这意味着收藏和 相关实体被提取到内存中,即使它们仍然存在 在即将执行级联操作时标记为延迟。 但是,此方法允许执行实体生命周期事件 对于每个操作。
但是,在级联上将对象图拉入内存可能会导致 相当大的性能开销,尤其是在级联时 收藏很大。确保权衡利弊 您定义的每个级联操作。