jpa--18.JPQL关联查询

参看易百教程:https://www.yiibai.com/jpa/jpa_jpql.html

 

1      关联查询

1.1  概念

在JPQL中,很多时候都是通过在实体类中配置实体关联的类属性来实现隐含的关联(join)查询。例如:

select o from Orders o whereo.address.streetNumber=2000

上述JPQL语句编译成以下SQL时就会自动包含关联,默认为左关联。

在某些情况下可能仍然需要对关联做精确的控制。为此,JPQL 也支持和 SQL 中类似的关联语法。如:

left out join /left join

inner join

left join /inner join fetch

其中,left join和left out join等义,都是允许符合条件的右边表达式中的实体为空。

 

1.2  问题

•       例如,以下外关联查询可以找出所有客户实体记录,即使它未曾订货:

select c from Customers c left join c.orderso

•       以下内关联查询只找出所有曾订过商品的客户实体记录:

select c from Customers c inner joinc.orders o

•       如果001号客户下过5次订单的话,以下fetch关联查询将得到 5个客户实体的引用,并且执行了 5 个订单的查询:

select c from Customers c left join fetchc.orders o where c.id=001

 

1.3  测试代码

1.3.1  返回单个

/**
    * JPQL 的关联查询同 HQL 的关联查询.
    */
   @Test
   public void testLeftOuterJoinFetch(){
      Stringjpql= "FROM Customer c LEFT OUTER JOIN FETCHc.orders WHERE c.id = ?";
     
      Customercustomer=
            (Customer)entityManager.createQuery(jpql).setParameter(1,11).getSingleResult();
      System.out.println(customer.getLastName());
      System.out.println(customer.getOrders().size());
     
   }

1.3.2  返回多个

/**
    * JPQL 的关联查询同 HQL 的关联查询.
    */
   @Test
   public void testLeftOuterJoinFetch(){
      Stringjpql= "FROM Customer c LEFT OUTER JOIN FETCHc.orders WHERE c.id = ?";
           
      List<Object[]>result= entityManager.createQuery(jpql).setParameter(1, 18).getResultList();
      System.out.println(result);
   }


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值