休眠中的@Fetch注释是什么?

Moh*_*zan 5 orm hibernate jpa

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@Fetch(FetchMode.SUBSELECT)
@JoinColumn(name = "ORU_OAUTH_ID", nullable = false)
@OrderBy("ORU_ORDER ")
private List<RedirectedURLs> acceptedReturnUrls;
Run Code Online (Sandbox Code Playgroud)
  1. 在这段代码中,我想了解@Fetch(FetchMode.SUBSELECT)的作用?
  2. orphanRemoval和CascadeType.DELETE有什么区别?

小智 3

  1. 如果这个 链接 可以帮助你。
    1. 对于 CascadingType.DELETE 和 orphanRemoval

级联删除

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

@Entity
class Employee {
     :
    @OneToOne(cascade=CascadeType.REMOVE)
    private Address address;
     :
}
Run Code Online (Sandbox Code Playgroud)

孤儿剔除

JPA 2 支持额外的、更积极的删除级联模式,可以使用 @OneToOne 和 @OneToMany 注释的 orphanRemoval 元素来指定:

@Entity
class Employee {
     :
    @OneToOne(orphanRemoval=true)
    private Address address;
     :
}
Run Code Online (Sandbox Code Playgroud)

不同之处:-

两种设置之间的区别在于对断开关系的响应。例如,将地址字段设置为空或另一个地址对象时。

  • 如果指定了orphanRemoval=true,则自动删除断开连接的Address 实例。这对于清理依赖对象(例如地址)非常有用,如果没有所有者对象(例如员工)的引用,这些对象就不应存在。

  • 如果仅指定cascade=CascadeType.REMOVE,则不会执行自动操作,因为断开关系不是删除操作。

(级联删除和删除是同义词)

这里