有什么区别 @OneToMany(cascade=REMOVE, mappedBy="customer") public List<Order> getOrders() { … } 和 @OneToMany(mappedBy="customer", orphanRemoval="true") public List<Order> getOrders() { … } 这个例子是从Java EE教程,但我仍然不明白的细节。
上面两个选项有什么区别? 什么时候最好select每个选项?
Django模型通常可以很好地处理ON DELETE CASCADE行为(以一种对本地不支持的数据库有效的方式)。 然而,我正在努力发现什么是最好的方式来覆盖这种行为是不适当的,在下面的情况下,例如: ON DELETE RESTRICT(即防止删除一个对象,如果它有子logging) ON DELETE SET NULL(即不要删除子logging,而是将其父键设置为NULL,而不是打破关系) 删除logging时更新其他相关数据(例如,删除上传的图像文件) 以下是我意识到的实现这些目标的潜在方法: 覆盖模型的delete()方法。 虽然这样的工作,当logging通过QuerySet被删除时,它被回避。 此外,必须重写每个模型的delete() ,以确保Django的代码永远不会被调用,并且不能调用super()因为它可能使用QuerySet来删除子对象。 使用信号。 这似乎是理想的,因为它们在直接删除模型或通过QuerySet删除时被调用。 但是,不可能防止子对象被删除,因此不可用来实现ON CASCADE RESTRICT或SET NULL。 使用正确处理这个问题的数据库引擎(在这种情况下,Django做了什么?) 等到Django支持它(直到那时才和bug一起生活) 看起来第一个select是唯一可行的select,但它很丑,把婴儿抛出洗澡水,并且在添加新的模型/关系时冒险丢失一些东西。 我错过了什么吗? 任何build议?
CoreData实体“A”使用级联删除规则与CoreData条目“B”的集合具有一对多关系。 在iCloud环境中,当设备1显示“B”条目之一的详细视图时,设备2删除“A”条目。 当设备1接收到NSPersistentStoreDidImportUbiquitousContentChangesNotification通知时,其App Delegate调用mergeChangesFromContextDidSaveNotification ,然后广播由视图控制器捕获的内部通知,显示条目“B”的细节(代码使用performBlock )。 但是,尽pipe在详细视图控制器接收到内部通知时入口“A”确实无效,但条目“B”仍然作为有效的CoreData对象存在。 看来级联规则还没有完成。 因此,设备1中的视图控制器不知道删除,这可能会导致意外的结果。 mergeChangesFromContextDidSaveNotification出现提前返回,当基础数据已合并,但级联规则尚未完成。 当通知到达时,我尝试刷新条目“B”,同时暂时将pipe理对象上下文的stalenessInterval设置为零,以便caching的对象不会被使用,但是我仍然从商店获得有效的条目“B”。 在这一点上检查null条目“A”不是一个选项,因为情况比我在这里描述的要复杂一些,在某些情况下空条目“A”是有效的。 我试图在合并更改之后并在将内部通知发送到视图控制器之前引入延迟。 我发现延迟2秒没有帮助,但延迟10秒。 但我不想依赖这个延迟。 这是一个没有太多数据的testing环境,我不知道在生产环境中会发生什么。 依靠实验性延迟似乎不是正确的做法。 有没有正确的事情? 还是我做错了,开始?
在PostgreSQL 8中,可以在下表中添加“删除级联”到两个外键而不丢弃后者? # \d pref_scores Table "public.pref_scores" Column | Type | Modifiers ———+———————–+———– id | character varying(32) | gid | integer | money | integer | not null quit | boolean | last_ip | inet | Foreign-key constraints: "pref_scores_gid_fkey" FOREIGN KEY (gid) REFERENCES pref_games(gid) "pref_scores_id_fkey" FOREIGN KEY (id) REFERENCES pref_users(id) 这两个引用的表格如下: # \d pref_games Table […]
我对JPA 2.0 orphanRemoval属性有点困惑。 我想我可以看到它是需要的,当我使用我的JPA提供商的数据库生成工具创build基础数据库DDL ON DELETE CASCADE上的特定关系。 但是,如果数据库存在并且关系上已经具有ON DELETE CASCADE ,那么这是否不足以级联删除? orphanRemoval还做了什么? 干杯
我试图做一个简单的例子,以了解如何从父表中删除一行,并自动删除使用Doctrine2在子表中匹配的行。 以下是我正在使用的两个实体: Child.php: <?php namespace Acme\CascadeBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="child") */ class Child { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"}) * * @ORM\JoinColumns({ * @ORM\JoinColumn(name="father_id", referencedColumnName="id") * }) * * @var father */ private $father; } Father.php <?php namespace Acme\CascadeBundle\Entity; use Doctrine\ORM\Mapping […]
我在entity framework中删除了一个问题。 简而言之,EF显式地试图从数据库中删除一个实体,尽pipe我已经明确地configuration了EF来使用数据库中的级联删除。 我的devise: 我有三个实体types, MainEntity , EntityTypeA和EntityTypeB 。 在删除EntityTypeA和EntityTypeB时,EF已被configuration为使用级联删除。 换句话说,如果我删除了MainEntity一个实例,我想要删除所有相关的EntityTypeA和EntityTypeB实例。 我从不删除EntityTypeA或EntityTypeB而不删除他们的父母。 我的问题是EF显式地为EntityTypeA发出DELETE语句,这会导致我的应用程序崩溃。 这就是我的模型的样子: 关系有以下非默认configuration: MainEntity -> EntityTypeA OnDelete: Cascade MainEntity -> EntityTypeB OnDelete: Cascade 关系EntityTypeA -> EntityTypeB具有OnDelete: None 数据库内容 INSERT INTO MainEntities (Name) values ('Test') insert into EntityTypeA (MainEntityID) VALUES (1) insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1) insert into EntityTypeB (MainEntityID, EntityTypeAId) […]
我有2个表:T1和T2,他们是现有的数据表。 我们在T1和T2之间有一对多的关系。 如何删除T1中的logging时,如何更改表定义以在SQL Server中执行级联删除,同时还删除了T2中的所有关联logging。 他们之间存在着外来的约束。 我不想删除表或创build触发器来删除T2。 例如,当我删除一个员工时,所有的审核logging也应该消失。 T1 – 员工, Employee ID Name Status T2 – 性能评测, Employee ID – 2009 Review Employee ID – 2010 Review