【问题标题】:JPQL fetch data from multiple tablesJPQL 从多个表中获取数据
【发布时间】:2018-03-31 09:31:12
【问题描述】:

我有以下课程。

class A{

    @OneToMany
    List<B> bList;
}

class B{}

class C extends A{

    @OneToMany
    List<D> dList;
}

class D{}

我为每个 @OneToMany 关系使用了延迟加载。

我的要求是使用“Join Fetch”从 C 中获取所有数据,因为我不想在访问 B 和 D 时触发任何其他数据库调用。 基本上我想获取 C,B 和 D 加载“EAGER” 像下面这样的东西 "SELECT DISTINCT c FROM C c LEFT JOIN c.B"

如果 JPQL 无法做到这一点,是否可以使用 java 标准 API 来实现?

【问题讨论】:

    标签: mysql join fetch jpql criteria-api


    【解决方案1】:

    是的,有可能,应该是这样的:

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<String> cq = cb.createQuery(String.class);
    Root<C> c = cq.from(C.class);
    Join<C,B> b = c.join("b", JoinType.LEFT); //left outer join
    b.on(
        //define criteria here
        )   
    );
    cq.select(b.<String>get("field names"));
    
    List<String> results = em.createQuery(cq)
                             .getResultList();
    

    以上代码需要根据您的要求进行调整。

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 2013-06-20
      • 2015-11-23
      相关资源
      最近更新 更多