【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());
}
测试结果:

【Spring Data JPA】10 对象导航查询的更多相关文章
- Spring Data JPA 自定义对象接收查询结果集
Spring Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和 ...
- Spring Data JPA中的动态查询 时间日期
功能:Spring Data JPA中的动态查询 实现日期查询 页面对应的dto类private String modifiedDate; //实体类 @LastModifiedDate protec ...
- spring data jpa使用原生sql查询
spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...
- Spring MVC和Spring Data JPA之按条件查询和分页(kkpaper分页组件)
推荐视频:尚硅谷Spring Data JPA视频教程,一学就会,百度一下就有, 后台代码:在DAO层继承Spring Data JPA的PagingAndSortingRepository接口实现的 ...
- Spring Data Jpa的四种查询方式
一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaR ...
- spring data jpa实现多条件查询(分页和不分页)
目前的spring data jpa已经帮我们干了CRUD的大部分活了,但如果有些活它干不了(CrudRepository接口中没定义),那么只能由我们自己干了.这里要说的就是在它的框架里,如何实现自 ...
- Spring Data Jpa (四)注解式查询方法
详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...
- Spring Data JPA 的 Specifications动态查询
主要的结构: 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询. ...
- Spring data jpa 实现简单动态查询的通用Specification方法
本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...
- spring data jpa 利用@Query进行查询
参照https://blog.csdn.net/yingxiake/article/details/51016234#reply https://blog.csdn.net/choushi300/ar ...
随机推荐
- 算法学习笔记(35): CMD Tree
对于 CMD Tree 的理解 原文:# 一种轻量级平衡树 这,EXSGT,感觉很像支持分裂 WBLT,但是相对来说思路很简单. 首先,在原文中说了: 能以均摊 \(\Theta(\log n)\) ...
- YNOI 做题记
YNOI 做题记 偶然有一天做到了其中的一道题,于是便开始做相关的题了-- [Ynoi2015] 我回来了 - 洛谷 这之一场联考搬过来的题--于是考场上写了一个 \(O((n + m)\log^2 ...
- ETL工具-nifi干货系列 第六讲 处理器JoltTransformJSON
1.处理器作用 使用Jolt转换JSON数据为其他结构的JSON,成功的路由到'success',失败的'failure'.处理JSON的实用程序不是基于流的,因此大型JSON文档转换可能会消耗大量内 ...
- linux系统下,搭建kafka环境(单机版)
安装前准备: 安装JDK 安装zookeeper(如果使用kafka内置的zookeeper,可以忽略) 第一步.安装JDK kafka依赖JAVA环境,所以首先要安装jdk 第二步.安装zookee ...
- vm ware 虚拟WIN XP 时卡
主机是I7 9700,SN750 NVME 1T SSD, 32G 内存,VM WARE 14,理论上虚拟WIN XP 不会卡,但实际情况就是很卡. 虚拟WIN7 ,WIN 10,UBUNTU LIN ...
- list对象转数组
list对象转数组 package com.example.core.mydemo.json5; import org.apache.commons.collections4.CollectionUt ...
- 使用Swig转换C++到别的编程语言
项目github地址: aoce 设定aoce能分别与UE4/Unity3D/android demo对接,就这三来看,分别是C++/C#/java三种语言. C++导出给别的语言使用,一般来说,分为 ...
- 一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator
前言 对于后端程序员来说,编写SQL代码是日常工作中不可或缺的一部分.然而,随着数据复杂性的增加,如何高效.准确地编写SQL查询成为了新的挑战.幸运的是,SQL Translator的出现为后端程序员 ...
- 实现ASP.Net Core3.1运行在DockeDesktop下并用Nginx实现负载均衡
一.首先去https://docs.docker.com/get-docker/下载Windows版本的Docker Desktop并安装(需要win10专业版以上操作系统,并启用CPU虚拟化和安装H ...
- yb课堂实战之轮播图接口引入本地缓存 《二十一》
轮播图接口引入缓存 CacheKeyManager.java package net.ybclass.online_ybclass.config; /** * 缓存key管理类 */ public c ...