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

    测试结果:

  • 相关阅读:
    Dom4J总结
    使用API修改控制台输出的颜色(前景色和背景色)
    小程序[邮箱提取器-EmailSplider]总结
    双击jar不能运行的解决方法
    VMware10中安装centos7没有可用的网络设备
    SynEdit(Delphi XE7)的安装和基本使用
    http协议的构成及字段说明(请求头、请求体、响应头)
    jmeter中JSON Extractor用法
    selenium+python3模拟键盘实现粘贴、复制
    python3操作MySQL实现数据驱动完整实例
  • 原文地址:https://www.cnblogs.com/mindzone/p/13414341.html
Copyright © 2011-2022 走看看