当前位置: 首页 > 知识库问答 >
问题:

cascade={“remove”}VS orphanremoval=true VS ondelete=“cascade

从烈
2023-03-14

我试图收集一些关于以下方法的信息,以便在删除父实体时自动删除子实体。似乎最常见的方法是使用这三个注释中的一个:cascade={“remove”}orphanremoval=trueondelete=“cascade”

我对第三个有点困惑:ondelete=“cascade”,因为在教义官方文件中关于这个问题的解释非常少),我希望有人能证实我从网上的研究和经验中收集和了解的以下信息...

它是做什么的?

cascade={“remove”}==>当拥有方实体为。即使您与其他拥有方实体处于manytomany中。

  • 应在集合上使用(因此在OneTomanyManyTomany关系中使用)
  • ORM中的实现

orphanremoval=true==>当拥有方实体是且它不再连接到任何其他拥有方实体时,将删除反向方的实体。(参考条令official_doc

  • ORM中的实现
  • 可与OneToOneOneToManyManyToMany
  • 一起使用

ondelete=“Cascade”==>这将向数据库中的外键列添加Delete=“Cascade”

  • 这个策略要想正确使用有点困难,但是可以非常强大和快速。(参考Dociety official_doc...但未阅读更多解释)
  • ORM所做的工作更少(与前面的两种方法相比),因此应该具有更好的性能

其他信息

  • 所有这三种方法都是在双向关系实体上实现的(对吗???)
  • 使用cascade={“remove”}完全绕过任何外键ondelete=cascade。(参考docratiine_official_doc)
  • OlphanRemoveCascade={“Remove”}在反向实体类中定义。
  • ondelete=“cascade”在所有者实体中定义
  • 您还可以编写@orm\joincolumn(ondelete=“cascade”)并让条令处理列名
/**
* @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; 

共有1个答案

罗河
2023-03-14

ondelete=“cascade”由数据库本身管理。cascade={“remove”}由条令管理。

ondelete=“cascade”速度更快,因为操作是在数据库级别执行的,而不是根据条令执行的。删除是由数据库服务器而不是条令执行的。对于cascade={“remove”},条令必须管理实体本身,并将执行额外的检查,以查看它是否没有任何其他拥有实体。当不存在其他实体时,它将删除该实体。但这会造成开销。

CASCADE={“删除”}

  • 当拥有方实体为。即使你和其他拥有的一方实体在一起。不,如果实体为其他东西所有。不会删除。
  • 应用于集合(因此在OneToMany或ManyToMany关系中)
  • ORM中的实现

OphanRemoval=“true”

  • 当拥有方实体为时,并且它不再连接到任何其他拥有方实体,则删除反向侧的实体。不完全是这样的,这使得教义的行为就像它不为其他实体所拥有,因此将其删除。
  • ORM中的实现
  • 可与OneToOne、OnetoMany或ManyTomany一起使用
    null
 类似资料:
  • 上面的两个选项有什么区别?什么时候选择每一个选项更可取?

  • Cascade 是一个 JavaScript/TypeScript 库,用来创建流行的用户界面,组合 Reactive 视图模型和功能性的 DOM 组件实现无缝的数据流展示。 在线演示:https://cascade.rocks/

  • Cascade 是一个 JavaScript/TypeScript 库,用来创建流行的用户界面,组合 Reactive 视图模型和功能性的 DOM 组件实现无缝的数据流展示。 在线演示:https://cascade.rocks/

  • 一个简单,优雅,且支持IE6+的CSS框架。

  • Cascade 是 paypal 上能够执行常见模型、方便对象、实现类、实用程序和用于 Scala 应用程序和服务器的包的集合库。它的设计初衷是为了: 能够很好的与 Scala 和 Typesafe 库一起运行 能够脱离其他库而独立运行 能够很好的定义功能 最大化的减少外部依赖数量 Related to (4) - 在建立自己的库之前使用 Scala 标准库功能

  • lazy 查询数据的时候,有些字段并不需要返回。这样能够节省内存,而且取数据的速度会更快一些。 虽然BuguQuery查询中的方法returnFields()和notReturnFields(),可以指定查询的时候返回、不返回哪些字段,但如果每次查询的时候都要特别指定,那会非常麻烦。有没有简便一点的方法呢?用lazy属性即可实现。 @Property、@Embed、@EmbedList都有lazy