JPA 中的 CascadeType.REMOVE 和 orphanRemoval 有什么区别? [英] What is the difference between CascadeType.REMOVE and orphanRemoval in JPA?

查看:52
本文介绍了JPA 中的 CascadeType.REMOVE 和 orphanRemoval 有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有什么区别

@OneToMany(cascade=REMOVE, mappedBy="customer")
public List<Order> getOrders() { ... }

@OneToMany(mappedBy="customer", orphanRemoval="true")
public List<Order> getOrders() { ... }

这个例子来自Java EE Tutorial,但我还是不明白细节.

This example is from Java EE Tutorial, but I still don't understand details.

推荐答案

来自这里:-

级联删除

使用 CascadeType.REMOVE(或 CascadeType.ALL,其中包括 REMOVE) 表示删除操作应该是自动级联到所引用的实体对象字段(一个集合可以引用多个实体对象字段):

Marking a reference field with CascadeType.REMOVE (or CascadeType.ALL, which includes REMOVE) indicates that remove operations should be cascaded automatically to entity objects that are referenced by that field (multiple entity objects can be referenced by a collection field):

@Entity
class Employee {
     :
    @OneToOne(cascade=CascadeType.REMOVE)
    private Address address;
     :
}

孤儿移除

JPA 2 支持额外的、更激进的移除级联模式可以使用 orphanRemoval 元素指定@OneToOne 和 @OneToMany 注释:

JPA 2 supports an additional and more aggressive remove cascading mode which can be specified using the orphanRemoval element of the @OneToOne and @OneToMany annotations:

@Entity
class Employee {
     :
    @OneToOne(orphanRemoval=true)
    private Address address;
     :
}

区别:-

这两种设置的区别在于响应断开关系.例如,当设置地址字段为空或另一个地址对象.

The difference between the two settings is in the response to disconnecting a relationship. For example, such as when setting the address field to null or to another Address object.

  • 如果指定了 orphanRemoval=true,则会自动删除断开连接的 Address 实例.这对清理很有用不应该存在的依赖对象(例如地址)来自所有者对象(例如员工)的引用.
  • 如果仅指定了 cascade=CascadeType.REMOVE,则不会执行自动操作,因为断开关系不是删除
    操作.
  • If orphanRemoval=true is specified the disconnected Address instance is automatically removed. This is useful for cleaning up dependent objects (e.g. Address) that should not exist without a reference from an owner object (e.g. Employee).
  • If only cascade=CascadeType.REMOVE is specified no automatic action is taken since disconnecting a relationship is not a remove
    operation.

这篇关于JPA 中的 CascadeType.REMOVE 和 orphanRemoval 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆