zoukankan      html  css  js  c++  java
  • 【Spring Data JPA】10 对象导航查询

    定义:

    查询一个记录时,也就是查询这个对象,通过这个对象查询他的关联对象

    【说白了不就是从我们设置好的集合中获取不就完了吗】

    环境搭建:

    INSERT INTO `jpa`.`cst_customer` (`cust_name`) VALUES ('传智博客'); 
    INSERT INTO `jpa`.`cst_linkman` (`lkm_name`) VALUES ('张三');
    INSERT INTO `jpa`.`cst_linkman` (`lkm_name`) VALUES ('李四'); 
    INSERT INTO `jpa`.`cst_linkman` (`lkm_name`) VALUES ('王五'); 
    UPDATE `jpa`.`cst_linkman` SET `lkm_cust_id` = '1' WHERE `lkm_id` = '1'; 
    UPDATE `jpa`.`cst_linkman` SET `lkm_cust_id` = '1' WHERE `lkm_id` = '2'; 
    UPDATE `jpa`.`cst_linkman` SET `lkm_cust_id` = '1' WHERE `lkm_id` = '3'; 

    测试执行:

        @Test
        @Transactional
        @Rollback(false) // 设置不自动回滚
        public void query(){
            Specification<Customer> customerSpecification = (Specification<Customer>) (root, criteriaQuery, criteriaBuilder) -> {
                // 获取比较的属性
                Path<Object> cust_id = root.get("custId");
                // 模糊要求指定参数类型
                return criteriaBuilder.equal(cust_id, 1);
            };
            Optional<Customer> customerOptional = customerRepository.findOne(customerSpecification);
    
            Customer customer = customerOptional.get();
    
            System.out.println(customer.getCustName());
    
            Set<LinkMan> linkmans = customer.getLinkmans();
    
            for (LinkMan linkman : linkmans) {
                System.out.println(linkman.getLkmName());
            }
        }

    测试结果:

    传智博客
    张三
    李四
    王五

    懒加载查询的问题:

    又称延迟加载,简单点意思就是不会立即执行查询,当指针的引用没有调用

    是不会加载出来赋值的。

    作用于XXXRepository的GetOne方法:

    customerRepository.getOne

    我们也可以自己手动配置更改加载行为:

    该枚举就两种属性,EAGER & LAZY

    相反的,从多记录的一方查询对应一个记录也是可以的

        @Test
        @Transactional
        @Rollback(false) // 设置不自动回滚
        public void query2(){
            
            Optional<LinkMan> linkManOptional = linkManRepository.findOne((Specification<LinkMan>) (root, criteriaQuery, criteriaBuilder) -> {
                Path<Object> path = root.get("lkmId");
                return criteriaBuilder.equal(path, 2);
            });
    
            LinkMan linkMan = linkManOptional.get();
            Customer customer = linkMan.getCustomer();
    
            System.out.println(customer.getCustName());
        }

    测试结果:

  • 相关阅读:
    cae when分组统计
    查看 Chrome 下载的文件的真实下载地址
    directory opus使用教程
    文件内容极速搜索工具: silversearcher-ag
    LINUX SHELL 变量的二次引用
    JS小练习
    jQuery
    JS-BOM对象
    JS-DOM对象
    JavaScript-基础知识
  • 原文地址:https://www.cnblogs.com/mindzone/p/13414341.html
Copyright © 2011-2022 走看看