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

    测试结果:

  • 相关阅读:
    每日一篇文献:Robotic pick-and-place of novel objects in clutter with multi-affordance grasping and cross-domain image matching
    每日一篇文献:Intuitive Bare-Hand Teleoperation of a Robotic Manipulator Using Virtual Reality and Leap Motion
    每日一篇文献:Virtual Kinesthetic Teaching for Bimanual Telemanipulation
    HEBI Robotic Arm VR Teleoperation
    「iQuotient Case」AR device teleoperated robotic arm
    VR and Digital Twin Based Teleoperation of Robotic Arm
    HEBI Robotic Arm VR Teleoperation
    Human Robot Interaction
    Immersive Teleoperation Project
    机器人演示学习
  • 原文地址:https://www.cnblogs.com/mindzone/p/13414341.html
Copyright © 2011-2022 走看看