我应该在播放列表实体中使用啥删除规则?
Posted
技术标签:
【中文标题】我应该在播放列表实体中使用啥删除规则?【英文标题】:What delete rule should I use in a playlist entity?我应该在播放列表实体中使用什么删除规则? 【发布时间】:2016-05-07 02:37:44 【问题描述】:在我的数据模型中,我有一个播放列表实体,它与播放列表中的项目具有一对多关系和反向关系。
删除播放列表时,我希望删除其中的所有内容,因此我使用级联删除规则。删除播放列表中的项目时,只需删除该项目即可。我应该使用哪个规则?
我会举例说明。
首先,托管对象如下所示
Playlist 1
items: a, b, c
Playlist 2
items: d
item a
playlist: 1
item b
playlist: 1
item c
playlist: 1
item d
playlist: 2
如果我删除播放列表 1,它将如下所示:
Playlist 2
items: d
item d
playlist: 2
如果我删除d,它会是这样的
Playlist 1
items: a, b, c
Playlist 2
items:
item a
playlist: 1
item b
playlist: 1
item c
playlist: 1
从文档中,我不知道反向关系使用哪个规则。
拒绝:只有没有播放列表的项目才会被删除。但是由于一对多关系中的级联规则,一个项目将始终有一个播放列表
Nullify:这只会删除播放列表和项目之间的关系,但不会删除项目。我想删除该项目。
级联:显然我不想在删除项目时删除播放列表
无操作:这将导致项目被删除,但播放列表的 items
属性仍将包含对该项目的引用。
我想我一定误解了这些规则之一。肯定有我可以用的吧?
注意:这不是 this 的副本,因为该 OP 希望在没有员工时也删除 Manager。但是,当其中的所有项目都被删除时,我仍想保留播放列表。
【问题讨论】:
【参考方案1】:删除规则指的是关系的目标,并说“当这个对象被删除时,我对相关对象做什么”。无论如何,您的item
都会被删除,因为这就是您正在做的事情。防止item
被删除的唯一规则是deny
如果是从 item
到 playlist
的反向关系,您需要 nullify
,因为这会从播放列表中删除对该项目的引用。
【讨论】:
但是如果我使用 nullify 和 delete 很多对象,它们仍然会在硬盘中,对吧?如果我删除了很多它们,它们可能会占用很多空间。我是不是误会了什么? 你误会了。它是从播放列表到将被取消的项目的前向引用(因为该项目不再存在)。该项目将被删除 我现在明白了。所以它有点像ARC,对吧?当引用设置为 null 时,对象会自动被垃圾回收。 没有。您正在专门删除该项目,因此 Core Data 需要决定如何处理引用的播放列表。它可以删除它、拒绝删除、什么都不做或取消对已删除项目的引用。 好的,我明白了。谢谢!以上是关于我应该在播放列表实体中使用啥删除规则?的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 中使用 JPA 从具有 OneToMany 关系的实体中删除对象
在 macOS 上的 SwiftUI 列表视图中选择和删除核心数据实体