JPA级联查询----导航查询

 导航查询 

    查询一个对象时的同时,通过此对象查询它的关联对象

   案例 客户和联系人 


        //从客户对象到联系人导航查询他所属的客户
//默认使用延迟加载
    @Test
    @Transactional //解决代码中no Session
    public void testQuery(){
       Customer customer=customerDao.getOne(1L);

        Set<LinkMan> linkMans=customer.getLinkMans();
        for (LinkMan linkMan : linkMans) {
            System.out.println(linkMan);
        }

 存在问题  导航查询时 默认使用延迟加载的形式查询,调用get方法时不会立即发送查询,而是在使用关联对象的时候才会查询----延迟加载

  解决办法  修改配置,将延迟加载改为立即加载   

  

 上面是一对多的形式 

 接下来 多对一的形式

 //从联系人对象导航查询他所属的客户
    //默认使用立即加载
    @Test
    @Transactional //解决代码中no Session
    public void testQuery02(){
        LinkMan linkMan=linkManDao.findOne(1l);

        Customer customer=linkMan.getCustomer();

        System.out.println(customer);
    }

修改加载方式  

总结 

  从一方查询多方

     默认 延迟加载(一般都是)

从多方查询一方

  默认 立即加载

  一到多  意味着 多方可能有很多数据,如果立即加载又用不上 浪费 大概是这个意思

原文地址:https://www.cnblogs.com/yangbom/p/14033250.html