【问题标题】:Fetching associations in joins Hibernate在加入 Hibernate 时获取关联
【发布时间】:2018-09-12 06:44:55
【问题描述】:

我是 Hibernate 的新手,在通过连接中的获取关联时,我遇到了以下查询:

em.createQuery(select guide from Guide guide join fetch guide.Students students);

上面的sql查询如下:

select 
guide0_id as id_1_2_0,
students1_id as id_1_6_1,
guide0_name as name_2_2_0,
students1_guide_id as guide_id_4_6_1....

Student 和 Guide 具有多对一关系,Student 是该关系的所有者。即使默认情况下延迟加载指南,上述查询也会获取学生详细信息。 我的问题是,如果我们的意图是让学生在 select 子句中以及在上面的 SQL 中看到,我们为什么不能做一个简单的:

em.createQuery(select guide,students from Guide guide join guide.Students 
students);

通过在select 子句中添加studentscolumn?

【问题讨论】:

    标签: java hibernate hql lazy-loading jpql


    【解决方案1】:

    即使指南默认是延迟加载,上述查询也会获取学生详细信息

    因为您使用了“join fetch”而不是“join”,所以您可以急切地加载学生。

    【讨论】:

    • 请阅读我的问题的最后几行。我的问题是,当我们可以简单地在 select 子句本身中添加学生列而不必在 join 后编写 fetch 时,为什么要进行 join fetch,因为在这两种情况下创建的 sql 都是相同的
    • 如果你在 select 子句中添加 guide,students,你会得到一个 Object 数组的结果。元组,您将在其中找到特定数组位置的指南和学生。然而,在 fetch join 的情况下,您将获得原始对象层次结构,其中子对象急切加载。
    【解决方案2】:
    // you can use simple join query to fetch your desired record as you want
    // and also you can get by Hibernate Criteria instead of using the SQL Query like 
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="child_table_column",referencedColumnName="id")
    private ParentTable updatedBy;
    // use above for POJO Configuration and then use simple criteria to get the DATa
    

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 2014-09-29
      • 2015-10-22
      • 1970-01-01
      • 2012-01-11
      • 2020-05-08
      • 2015-09-27
      • 2013-10-04
      • 2023-03-26
      相关资源
      最近更新 更多