方法的查询策略的属性表达式(Property Expressions)

属性表达式只能引用托管(泛化)实体的直接属性,如前一个示例所示。在查询创建时,已经确保解析的属性是托管实体的属性,但是,还可以通过遍历嵌套属性定义约束。假设一个 Person 实体对象里面有一个 Address 的属性里面包含一个 ZipCode 属性。

在这种情况下,方法名为:

List<Person> findByAddressZipCode(String zipCode);

创建及其查找的过程是:解析算法首先将整个 part(AddressZipCode)解释为属性,并使用该名称(uncapitalized)检查域类的属性,如果算法成功,则使用该属性,如果不是,则算法拆分了从右侧的驼峰部分的信号源到头部和尾部,并试图找出相应的属性。在我们的例子中,AddressZip 和 Code 如果算法找到一个具有该头部的属性,那么它需要尾部,并从那里继续构建树,然后按照刚刚描述的方式将尾部分割,如果第一个分割不匹配,则算法将分割点移动到左(Address,ZipCode),然后继续。

虽然这在大多数情况下应该起作用,但算法可能会选择错误的属性。假设 Person 该类也有一个 addressZip 属性,该算法将在第一个分割轮中匹配,并且基本上选择错误的属性,最后失败(因为该类型 addressZip 可能没有 code 属性)。

要解决这个歧义,可以在方法名称中使用手动定义遍历点,所以我们的方法名称最终会如此:

List<Person> findByAddress_ZipCode(ZipCode zipCode);

当然 Spring JPA 里面是将下划线视为保留字符,但是强烈建议遵循标准 Java 命名约定(即不使用属性名称中的下划线,而是使用骆驼案例),属性命名的时候注意下这个特性。

可以到 PartTreeJpaQuery.class 查询一下相关的 method 的 name 的拆分和实现逻辑,也可以利用开发工具的 Search anywhere 视图输入 PropertyExpression,然后 Find Used 就可以跟出很多源码,然后设置个断点,就可以进行分析了。

Spring Data JPA 从入门到精通~方法的查询策略的属性表达式相关推荐

  1. Spring Data JPA 从入门到精通~方法的查询策略设置

    方法的查询策略设置 通过下面的命令来配置方法的查询策略: @EnableJpaRepositories(queryLookupStrategy= QueryLookupStrategy.Key.CRE ...

  2. Spring Data JPA 从入门到精通~@Modifying修改查询

    学习思路一样,我们先看源码: public @interface Modifying { //如果配置了一级缓存,这个时候用clearAutomatically=true,就会刷新hibernate的 ...

  3. Spring Data JPA 从入门到精通~SpEL表达式的支持

    在 Spring Data JPA 1.4 以后,支持在 @Query 中使用 SpEL 表达式(简介)来接收变量. SpEL 支持的变量 变量名 使用方式 描述 entityName select ...

  4. Spring Data JPA 从入门到精通~JpaSpecificationExecutor的使用方法

    JpaSpecificationExecutor 源码和 API 我们也可以通过 idea 工具详细看其用法和实现类,JpaSpecificationExecutor 是 Repository 要继承 ...

  5. Spring Data JPA 从入门到精通~@Version处理乐观锁的问题

    @Version 处理乐观锁的问题 @Version 乐观锁介绍 我们在研究 Auditing 的时候,发现了一个有趣的注解 @Version,源码如下: package org.springfram ...

  6. spring data jpa从入门到精通_Spring Data JPA的简单入门

    前言 spring data JPA是spring团队打造的sping生态全家桶的一部分,本身内核使用的是hibernate核心源码,用来作为了解java持久层框架基本构成的样本是再好不过的选择.最近 ...

  7. Spring Data JPA 从入门到精通~Naming命名策略详解及其实践

    Naming 命名策略详解及其实践 用 JPA 离不开 @Entity 实体,我都知道实体里面有字段映射,而字段映射的方法有两种: 显式命名:在映射配置时,设置的数据库表名.列名等,就是进行显式命名, ...

  8. Spring Data JPA 从入门到精通~默认数据源的讲解

    默认数据源 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://1 ...

  9. Spring Data JPA 从入门到精通~Auditing及其事件详解

    Auditing 及其事件详解 Auditing 翻译过来是审计和审核,Spring 的优秀之处在于帮我们想到了很多繁琐事情的解决方案,我们在实际的业务系统中,针对一张表的操作大部分是需要记录谁什么时 ...

最新文章

  1. 【网络爬虫】BeautfulSoup爬百度百科(真の能看懂~!)
  2. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?...
  3. The LMAX disruptor Architecture--转载
  4. WebSocket负载均衡
  5. 40万总奖金!顶级云服务免费用!2021全球高性能云计算创新大赛报名中!
  6. Confluence 6 为发送邮件配置服务器
  7. 悲痛!高校一研究生在校内被撞身亡,肇事者为该校博导,警方已介入
  8. android不同机型编译不同so,如何使用adb命令查看android中的数据库
  9. linux 内存使用很大,在32位和64位Linux上,为什么同一进程的pmap的内存使用量会有很大差异?...
  10. 物联网3A格局:阿里云、亚马逊等入选Gartner最新全球物联网竞争报告
  11. 网卡设置 多网卡的7种bond模式原理
  12. windows2003事件记录中显示组策略错误,登录域控制器很慢(服务器自身)
  13. 《女士品茶》读书笔记
  14. 测量计算机编程fx500,工程测量中fx-500P计算器基本程序.doc
  15. SpringBoot入门之SpringBoot热部署,什么是热部署 04
  16. matlab自动变量名,matlab中如何自动给变量命名?
  17. ASP.NET访问Excel 失败的解决方法(错误号:80070005,8000401a)
  18. 直接调节风扇转速的Windows开源工具--Open Hardware Monitor
  19. js实现刷新页面的方法
  20. 期待第二届云计算大会

热门文章

  1. 美团点评酒旅数据仓库建设实践
  2. Bifrost微前端框架及其在美团闪购中的实践
  3. 论文浅尝 - EMNLP2020 | 基于规则引导的协作 agent 知识图谱推理学习
  4. 容器的使用和创建虚拟环境 vitualenv
  5. Android官方开发文档Training系列课程中文版:性能优化建议
  6. 企业咨询:常用分析和咨询方法列表
  7. 论文学习10-Joint entity recognition and relation extraction as a multi-head selection problem(实体关系联合抽取模型
  8. java和python对比----1:
  9. 编程开发之--java多线程学习总结(3)类锁
  10. WinForm 图片变灰方法