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