码迷,mamicode.com
首页 > 编程语言 > 详细

【Spring Data JPA】10 对象导航查询

时间:2020-08-01 14:37:50      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:要求   optional   导航   into   rop   epo   比较   return   inf   

定义:

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

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

环境搭建:

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

测试结果:

技术图片

 

【Spring Data JPA】10 对象导航查询

标签:要求   optional   导航   into   rop   epo   比较   return   inf   

原文地址:https://www.cnblogs.com/mindzone/p/13414341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!