• 【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());
        }

    测试结果:

  • 相关阅读:
    react-native中使用mobox数据共享
    vue cli3项目的pc自适应布局_vw
    webpack配置多页面和提取css
    react-native报错Encountered two children with the same key, `%s`.
    __proto__和prototype
    json-server配置模拟数据
    全局判断登录是否过期代码
    react-native环境搭建
    css的垂直居中常用几种方法
    进程和线程
  • 原文地址:https://www.cnblogs.com/mindzone/p/13414341.html
Copyright © 2020-2023  润新知