• day36 04-Hibernate检索方式:多表连接查询


    返回的是一个List集合,这个List集合的泛型是一个Object数组。最后会拿到一个里面放Object数组的List集合。


    HQL内连接查询,发出SQL语句查询出来的结果集被Hibernate封装成Object数组(Object[])的集合。所以不会产生重复数据。但是必须得是主表对应的类Customer的toString()方法打印出Order,而从表对应的类Order不打印customer对象。

    Query query = session.createQuery("from Customer c inner join c.orders");//Query接口

      List<Object[]> list  = query.list();
      for (Object[] objects : list) {
       System.out.println(Arrays.toString(objects));
      }


    Query query = session.createQuery("from Customer c  inner join fetch c.orders");//Query接口

    List<Customer> list = query.list();
    for (Customer customer : list) {//关联查询的时候会得到多少条记录?
    System.out.println(customer);//两个表的关联查询,内连接查询会得到30条记录
    //为什么会有重复的数据?因为这是封装的问题
    }

    Query query = session.createQuery("from Customer c  inner join fetch c.orders");//Query接口

    List<Customer> list = query.list();
    for (Customer customer : list) {//关联查询的时候会得到多少条记录?
    System.out.println(customer);//两个表的关联查询,内连接查询会得到30条记录
    //为什么会有重复的数据?因为这是封装的问题
    }

    Query query = session.createQuery("select distinct c from Customer c  inner join fetch c.orders");

    List<Customer> list = query.list();
    for (Customer customer : list) {//关联查询的时候会得到多少条记录?
    System.out.println(customer);//两个表的关联查询,内连接查询会得到30条记录
    //为什么会有重复的数据?因为这是封装的问题
    }

    Query query = session.createQuery("select distinct c from Customer c  inner join fetch c.orders");//Query接口

    List<Customer> list = query.list();
    for (Customer customer : list) {//关联查询的时候会得到多少条记录?
    System.out.println(customer);//两个表的关联查询,内连接查询会得到30条记录
    //为什么会有重复的数据?因为这是封装的问题
    }


    Query query = session.createQuery("from Order o inner join o.customer");//Query接口

      List<Object[]> list  = query.list();
      for (Object[] objects : list) {
       System.out.println(Arrays.toString(objects));
      }

     

    Query query = session.createQuery("from Order o  inner join fetch o.customer");//Query接口

    List<Order> list = query.list();
            for (Order order : list) {
       System.out.println(order);
      }

    Query query = session.createQuery("select distinct o from Order o  inner join fetch o.customer");//Query接口

    List<Order> list = query.list();
    for (Order order : list) {
    System.out.println(order);
    }


    迫切内连接查出来的也是30条数据,但是为什么会有很多重复的数据?因为是封装的问题。

  • 相关阅读:
    第一次结对编程作业
    第一次个人编程作业
    获取file中字段,写入到TXT文件中
    通过file中的字段查询MySQL内容
    MySQL常用语句
    MySQL乱码问题
    脚本数据编码格式转换
    mysql 常用命令操作
    thinkphp项目 Class 'finfo' not found
    POJ3255--次短路
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/6697380.html
Copyright © 2020-2023  润新知