我试图收集以下信息,以便在删除父实体时自动删除子实体。似乎最常见的方法是使用这三种注释中的一种:cascade={“remove”}
或orphandremove=true
或ondelete=“cascade”
。
我对第三个有点困惑:ondelet="CASCADE"
,因为教义官方留档中关于这个的解释非常少),我希望有人能证实我从我的研究中收集和理解的以下信息网络和经验...
它有什么作用?
cascade={“remove”}
==
OneToMany
或ManyToMany
关系中)孤儿删除=true
==
OneToOne
、OneToMany
或ManyToMany
onDelete="CASCADE"
==
其他信息
orphaneremove
和cascade={“remove”}
在反向实体类中定义
ondelete=“CASCADE”
在所有者实体中定义 @ORM\JoinColumn(onDelete=“CASCADE”)
,让doctrine处理列名级联={"删除"}
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", cascade={"remove"})
*/
protected $Phonenumbers
孤立删除=真
/**
* @OneToMany(targetEntity="Phonenumber", mappedBy="contact", orphanRemoval=true)
*/
protected $Phonenumbers
onDelete=“级联”
/**
* @ManyToOne(targetEntity="Contact", inversedBy="phonenumbers")
* @JoinColumn(name="contact_id", referencedColumnName="contact_id", onDelete="CASCADE")
*/
protected $contact;
onDelete=“CASCADE”
由数据库本身管理<代码>级联={“删除”}由条令管理。
onDelete="CASCADE"
更快,因为操作是在数据库级别执行的,而不是通过原则执行的。删除由数据库服务器而不是Doctrine执行。使用层叠={"删除"}
原则必须管理实体本身,并将执行额外的检查,以查看它是否没有任何其他拥有实体。当没有其他实体存在时,它将删除该实体。但这造成了间接费用。
级联={"删除"}
orphanRemoving=“true”
onDelete=“级联”
问题内容: 我在使用具有以下映射的JPA删除孤立节点时遇到问题 我遇到了孤立角色挂在数据库周围的问题。 我可以使用特定于注释的Hibernate标记,但是显然我不想将解决方案绑定到Hibernate实现中。 编辑 :似乎JPA 2.0将包括对此的支持。 问题答案: 如果将它与Hibernate一起使用,则必须显式定义批注,该批注可与JPA结合使用。 如果您不打算使用Hibernate,则必须先明确
最近,我问了一个关于堆栈溢出的非常类似的问题,这是另一个问题的重复。在另一个问题中,我采用了一种变通方法,解决了我的问题。现在,这一次解决方案不起作用,所有其他提到的解决方案都不起作用。此外,链接到第一个线程的其他线程的所有解决方案都不起作用。 这是我最初的问题: SQLServerException:无效的列名 这就是重复: Hibernate列名问题 我已经检查了链接和相关部分右侧的主题,但找
有人知道我为什么会有这种行为吗?是我的代码出了bug还是什么问题?
客户端版本:version.info{Major:“1”,Minor:“0”,GitVersion:“V1.0.4”,GitCommit:“65D28D5FD12345592405714C81CD03B9C41D41D9”,GitTreesteat:“Clean”} 服务器版本:version.info{Major:“1”,Minor:“2”,GitVersion:“V1.2.0”,GitComm
编辑:修改问题以更好地反映问题。此处最初发布的问题 我有一个父实体(< code >上下文)和一个子实体(< code >用户)。父级上的级联“删除”不会删除子级。代码如下:
问题内容: 我必须缺少SQLAlchemy的层叠选项的琐碎内容,因为我无法获得简单的层叠删除来正确操作-如果删除了父元素,则子对象将使用外键保留。 我在这里放了一个简洁的测试用例: 输出: 父母与子女之间存在简单的一对多关系。该脚本创建一个父级,添加3个子级,然后提交。接下来,它删除父级,但子级仍然存在。为什么?如何使孩子级联删除? 问题答案: 问题是sqlalchemy认为是父级的,因为这是您定