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

方法的查询策略的属性表达式(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 就可以跟出很多源码,然后设置个断点,就可以进行分析了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

effective C++ 读书笔记

本篇文章都是摘自 《Effective C》 中文版 第三版 和 第二版。 再好的记性也有忘记的一天&#xff0c;记录下以备随时查看。。。 电子书下载地址&#xff1a;https://download.csdn.net/download/freeking101/10278088 《Effective C》第二版在线教程&#xff1a;http://www.…

抓取新浪的每日星座运势

从新浪上抓取每日的星座运势&#xff0c;然后往求实的Astrology版发. #!/usr/bin/python# encoding: utf-8from sgmllib import SGMLParserfrom datetime import datetime, timedeltaimport reimport urllibstarurlhttp://image2.sina.com.cn/ast/2007index/tmp/star_php/star.…

Spring Data JPA 从入门到精通~思维导图

#原图 System.out.println("https://www.processon.com/view/61c7227c0e3e7474fb9b4b76?fromnew1");

发邮件

System.Net.Mail.MailMessage message new System.Net.Mail.MailMessage("发件邮箱gmail.com","收件邮箱163.com", "测试标题", "测试内容"); System.Net.Mail.SmtpClient smtpClient new System.Net.Mail.SmtpClient("smtp.g…

Linux 编译 没有path,编译linux-2.6.21的问题-‘PATH_MAX’ undeclared

编译linux-2.6.21的问题&#xff1a;cripts/mod/sumversion.c: In function ‘get_src_version’:scripts/mod/sumversion.c:384: error: ‘PATH_MAX’ undeclared (first usein this function)scripts/mod/sumversion.c:384: error: (Each undeclared identifier isreported o…

高通5G版图现身!你的网络生活将迎来巨变?

来源&#xff1a;36Kr 作者&#xff1a;桐由于骁龙845移动平台和骁龙636移动平台的首发&#xff0c;3月的手机市场对于持币代购的消费者而言注定是充满期待的&#xff0c;在三星S9和红米Note5刷屏之时&#xff0c;曾经隐身手机幕后的高通也再一次引发用户热议&#xff0c;高通…

异步复位设计中的亚稳态问题及其解决方案

异步复位设计中的亚稳态问题及其解决方案田志明&#xff0c;杨军&#xff0c;罗岚&#xff08;东南大学国家专用集成电路系统工程技术研究中心&#xff0c;南京 210096&#xff09;摘 要&#xff1a;尽管异步复位是一种安全可靠复位电路的方法&#xff0c;但如果处理不当的话&a…

linux添加nginx,linux下安装Nginx1.16.0的教程详解

因为最近在倒腾linux&#xff0c;想安装新版本的nginx&#xff0c;找了一圈教程没有找到对应的教程&#xff0c;在稍微倒腾了一会之后终于成功的安装了最新版。服务器环境为centos&#xff0c;接下来是详细步骤&#xff1a;安装必要依赖插件?创建文件夹并切换过去?下载安装包…

深度|2030年8亿人会失业!图解机器人如何取代你的工作

来源&#xff1a;财看见-腾讯财经&#xff08;ID&#xff1a;qqckj2017&#xff09;未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0…

Java使用Itext5.5.10进行pdf签章

来源&#xff1a;Java使用Itext5.5.10进行pdf签章_liumengya007007的博客-CSDN博客_itext 签章 啰嗦 说到PDF数字签名签章&#xff0c;这个其实也是数字证书信息安全的应用范畴&#xff0c;关于数字证书和数字签名&#xff0c;网上有很多解释说明&#xff0c;但讲解都多不够详…

Python的bool类型

写习惯了C#的代码&#xff0c;在想要将一个字符串False转换为bool型的时候&#xff0c;很自然的写了如下的Python代码&#xff1a; 看到上面的结果了没&#xff1f;是True。突然记起Python中除了、""、0、()、[]、{}、None为False之外&#xff0c;其他的都是True。也…

linux qt程序编译出错,QTcreator编译出错

作为移植性很好的QT图形开发工具&#xff0c;他支持windows,linux,FBS,macos&#xff0c;Symbian等OS&#xff0c;在windows下的QT程序在安装了QTcreator后很快就编译出来了&#xff0c;可是在我的redhat enterprise5 安装后&#xff0c;一个hello&#xff0c;world!却报错了错…

C++ Programmer's Cookbook C++基础和C++高级

From&#xff1a;http://www.cppblog.com/mzty/archive/2007/08/13/29922.html ------------------------------------------------------------------------------------------ C随笔分类列表&#xff08;基础&#xff09;: VS Studio: VS快捷键&#xff1a;http://www.cppb…

工业机器人发展趋势分析 未来营收规模达到百亿级水平

来源&#xff1a;前瞻产业研究院摘要&#xff1a;工业机器人是打造自动化工厂的重要组成,可有效提高效率生产、降低成本和控制质量。工业机器人是面向工业领域的多关节机械手或多自由度的机器装置,它能自动执行工作,是靠自身动力和控制能力来实现各种功能的一种机器。工业机器人…

【itext学习之路】--5.对pdf进行盖章/签章/数字签名

来源&#xff1a;【itext学习之路】-------&#xff08;第五篇&#xff09;对pdf进行盖章/签章/数字签名_tomatocc的博客-CSDN博客_itext 数字签名 在上一篇文章中&#xff0c;我们学习了使用itext对pdf增加图片水印和文本水印&#xff0c;那么这篇文章我们将要学习更高级一点…

jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关...

获取一组radio被选中项的值var item $(input[nameitems][checked]).val();获取select被选中项的文本var item $("select[nameitems] option[selected]").text();select下拉框的第二个元素为当前选中值$(#select_id)[0].selectedIndex 1;radio单选组的第二个元素为…

c++11 标准模板(STL)(std::pair)(七)访问 pair 的一个元素

定义于头文件 <utility> std::pair 是一个结构体模板&#xff0c;其可于一个单元存储两个相异对象。 pair 是 std::tuple 的拥有两个元素的特殊情况。 访问 pair 的一个元素 std::get(std::pair) template< size_t I, class T1, class T2 > typename std::tuple…

python selenium 用法 和 Chrome headless

From: http://cuiqingcai.com/2599.html Selenium教程&#xff1a;https://www.yiibai.com/selenium selenium 官方参考文档&#xff1a;https://selenium-python.readthedocs.io/index.html Selenium Documentation&#xff1a;https://www.seleniumhq.org/docs Selenium 与 …

linux ssh 时间设置,Linux下设置SSH Server设置时间链接限制(示例代码)

OpenSSH基于安全的理由&#xff0c;如果用户连线到SSHServer后闲置一段时间&#xff0c;SSH Server会在超过特定时间后自动终止SSH连线。本人习惯长时间连接&#xff0c;需要做如下修改&#xff1a;1、打开ssh配置文件&#xff1a;# vim /etc/ssh/sshd_config加入如下两个参数保…

【itext学习之路】--1.创建一个简单的pdf文档

来源&#xff1a;https://blog.csdn.net/tomatocc/article/details/80666011 iText是著名的开放源码的站点sourceforge一个项目&#xff0c;是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档&#xff0c;而且可以将XML、Html文件转化为PDF文件 本教程中…