在使用Jpa 查询,想要实现如下sql:

SELECT *
FROM table WHERE id =... AND (already_used = TRUE OR  expire_date < ...) 

原使用:findByIdAndAlreadUsedTrueOrExpireDateBefore()方法,发现jpa实现的是

where id =? and already_used = true or expire_date < ?

并不是我想要的。
解决方法:
1、使用@Query注解写原生sql来实现,但是如果有分页就比较麻烦
2、将 A and (B or C) 拆分成 A and B or A and C

findByIdAndAlreadUsedTrueOrExpireDateBefore()
===>
findByIdAndAlreadUsedTrueOrIdAndExpireDateBefore() 

即可,示例如下:

public class Girls {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private long classes;private Boolean hasBF;private int age;private String cupSize;private String name;
}
public interface GirlsDao extends JpaRepository<Girls,Long> {List<Girls> findByClassesAndHasBFTrueOrCupSize(long classes,String cupSize);List<Girls> findByClassesAndHasBFTrueOrClassesAndCupSize(long classes0,long classes1,String cupSize);
}

测试:查找同一个classes下只要hasBF ==True 或cupSize==”B”中满足其中一个条件即可的数据
方法一:

@Test
public void test(){List<Girls> girls = girlsDao.findByClassesAndHasBFTrueOrCupSize(12, "B");girls.forEach(System.out::println);
}

结果如下:

Hibernate: select girls0_.id as id1_0_, girls0_.age as age2_0_, girls0_.classes as classes3_0_, girls0_.cup_size as cup_size4_0_, girls0_.hasbf as hasbf5_0_, girls0_.name as name6_0_ from girls girls0_ where girls0_.classes=? and girls0_.hasbf=1 or girls0_.cup_size=?
Girls{id=1, classes=12, hasBF=true, age=18, cupSize='B', name='XI'}
Girls{id=2, classes=12, hasBF=false, age=17, cupSize='B', name='HE'}
Girls{id=3, classes=12, hasBF=true, age=18, cupSize='C', name='HH'}
Girls{id=4, classes=13, hasBF=true, age=16, cupSize='B', name='XX'}

方法二:

@Test
public void contextLoads() {List<Girls> girls = girlsDao.findByClassesAndHasBFTrueOrClassesAndCupSize(12, 12, "B");girls.forEach(System.out::println);
}

结果如下:

Hibernate: select girls0_.id as id1_0_, girls0_.age as age2_0_, girls0_.classes as classes3_0_, girls0_.cup_size as cup_size4_0_, girls0_.hasbf as hasbf5_0_, girls0_.name as name6_0_ from girls girls0_ where girls0_.classes=? and girls0_.hasbf=1 or girls0_.classes=? and girls0_.cup_size=?
Girls{id=1, classes=12, hasBF=true, age=18, cupSize='B', name='XI'}
Girls{id=2, classes=12, hasBF=false, age=17, cupSize='B', name='HE'}
Girls{id=3, classes=12, hasBF=true, age=18, cupSize='C', name='HH'}

springboot jpa 实现复杂的sql 如 A and (B or C)相关推荐

  1. java sql sum函数的使用方法,Springboot jpa使用sum()函数返回结果如何接收

    1.需求 我的需求是统计域名以及域名出现的次数. 之前使用springboot jpa都是把数据库中的表跟实体类绑定,创建继承JpaRepository的接口.如下: @Repository publ ...

  2. springboot jpa sql打印_SpringBoot集成Spring Data JPA以及读写分离

    相关代码:github OSCchina JPA是什么 JPA(Java Persistence API)是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关联映射工具 来管理 ...

  3. springboot+jpa+mybatis 多数据源支持

    springboot+jpa+mybatis 多数据源支持 配置dataSource import org.springframework.beans.factory.annotation.Quali ...

  4. 补习系列(19)-springboot JPA + PostGreSQL

    目录 SpringBoot 整合 PostGreSQL 一.PostGreSQL简介 二.关于 SpringDataJPA 三.整合 PostGreSQL A. 依赖包 B. 配置文件 C. 模型定义 ...

  5. springboot+jpa+mysql Springboot+jpa+jdbc+sqlserver 使用时遇到的一系列的问题

    更改背景 正在做一个微信小程序的前后端项目,一开始使用的是springboot+jpa+mysql,但负责接受数据存入数据库的负责人执意要用sqlserver.本来微信小程序前端,以及spring b ...

  6. 全网最全精析破解 Springboot+Jpa 对数据库增删改查

    前言: 昨天做的是springboot+mybatis 对数据库进行增删改查 但是我感觉配置文件太多了 很麻烦 繁琐 今天搞一下springboot+Jpa对数据库进行增删改查, 感觉很好用 ,所以记 ...

  7. SpringBoot+JPA 启动建表错误:CommandAcceptanceException: Error executing DDLalter table X drop foreign key

    搭个Springboot+Jpa环境,一启动就报错: org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing ...

  8. springboot jpa甜品销售系统源码

    项目名称 springboot jpa甜品销售系统源码+论文+答辩ppt+所需软件环境+查重报告+任务书+开题报告+代码讲解视频 视频效果 springboot jpa甜品销售系统源码 下载地址 sp ...

  9. springboot+jpa配置多数据源(Oracle+SqlServer)

    本贴主要讲解配置多数据源 springboot+jpa的整合需要自行准备好 1.maven中要导入Oracle和SqlServer的jar包 <dependency><groupId ...

最新文章

  1. IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  2. python安装numpy-Python使用pip安装Numpy模块
  3. htc desire 10 pro android 8.0,HTC发布新机Desire 10 旗舰级像素配置
  4. 计算机科学的大部分研究是基于,计算机科学
  5. 趣谈设计模式 | 职责链模式(ChainOfResposibility):请求的转发处理
  6. Linux下安装JDK7和TomCat7
  7. python编程语言-Python现在还是最火的编程语言吗?
  8. 「leetcode」202. 快乐数:今天你快乐了么?
  9. 前端 encodeURI 为什么要编码两次
  10. c语言dnf脚本源码,dnf纯脚本源码贝贝
  11. 51单片机控制舵机c语言代码,一文解析51单片机PWM双舵机控制(附程序)
  12. Retinex低光照图像增强
  13. 《自控力》读书笔记及实践
  14. 初学C语言——三位数倒序
  15. 单反相机的传奇—佳能单反50年辉煌之路(连载十)
  16. 要穿上就总是和脚抱得紧紧
  17. 剑指Offer LeetCode 面试题58 - II. 左旋转字符串
  18. MediaStore.Images.Media.insertImage保存图片
  19. java把汉字转换成拼音的2种方式
  20. 微信小程序个人中心页与登录界面的切换

热门文章

  1. oracle查询所有员工人数,oracle查询员工人数最少的部门
  2. 敏捷(Agile)是什么?有哪些优缺点?敏捷落地需不需工具?
  3. 《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》论文笔记
  4. 你的独立思考能力正在慢慢退化
  5. 如何快速不借用转换工具将FLV格式视频转换成MP4
  6. java学习总结(16.05.25)eclipse的查找和替换功能 Ctrl+F
  7. php正则替空行,正则匹配空行实例
  8. oracle 级联外键,Oracle 级联删除外键
  9. 计算机软件服务费分录,财务软件服务费会计分录是什么?
  10. 32位服务器系统安装教程,服务器系统数据库安装教程