我应该在播放列表实体中使用啥删除规则?

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

如果是从 itemplaylist 的反向关系,您需要 nullify,因为这会从播放列表中删除对该项目的引用。

【讨论】:

但是如果我使用 nullify 和 delete 很多对象,它们仍然会在硬盘中,对吧?如果我删除了很多它们,它们可能会占用很多空间。我是不是误会了什么? 你误会了。它是从播放列表到将被取消的项目的前向引用(因为该项目不再存在)。该项目将被删除 我现在明白了。所以它有点像ARC,对吧?当引用设置为 null 时,对象会自动被垃圾回收。 没有。您正在专门删除该项目,因此 Core Data 需要决定如何处理引用的播放列表。它可以删除它、拒绝删除、什么都不做或取消对已删除项目的引用。 好的,我明白了。谢谢!

以上是关于我应该在播放列表实体中使用啥删除规则?的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 中使用 JPA 从具有 OneToMany 关系的实体中删除对象

使用实体框架从 ID 列表中删除多个项目

在 macOS 上的 SwiftUI 列表视图中选择和删除核心数据实体

如何创建指向同一实体的列表和属性

克隆 JavaScript 对象时如何排除键列表? [复制]

我应该为高分列表使用啥数据结构? [复制]