什么是hibernate中的@Fetch注释?

时间:2017-04-20 09:46:41

标签: hibernate jpa orm

@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;
  1. 在这段代码中,我想了解@Fetch(FetchMode.SUBSELECT)的作用?
  2. orphanRemoval和CascadeType.DELETE有什么区别?

1 个答案:

答案 0 :(得分:3)

  1. 如果这样 link 可以帮助你。
    1. 对于CascadingType.DELETE和orphanRemoval
  2.   

    级联删除

         

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

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

    孤儿删除

         

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

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

    <强>区别: -

         

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

         
        
    • 如果指定了orphanRemoval = true,则会自动删除已断开连接的Address实例。这对清理很有用   在没有a的情况下不应该存在的依赖对象(例如地址)   来自所有者对象(例如员工)的引用。

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

    •   

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

    来自here