mysql - 在 Spring Boot 中生成动态查询

标签 mysql spring-boot spring-data spring-data-jpa

我有一个 native Mysql 查询

select tl_id,c_name,m_name,u_first_name,t_name, 
tl_logged_at,tl_minutes,tl_description
from users inner join clients on u_id=c_frn_owner_id
inner join matters on m_frn_client_id = c_id
inner join tasks on t_frn_matter_id = m_id
inner join task_logs on tl_frn_task_id = t_id
where c_id =2 and m_id=4 and t_id= 3 and u_id = 4

我可以为此编写JPQL而不是 native 查询。但是如何使用JPA规范获得相同的查询,因为where条件中的列或字段c_idm_idt_idu_id 是可选的。它们是提供给用户的过滤选项。

可以使用 if 条件生成 native 查询。但它们很容易出现拼写错误和 SQL 注入(inject)。

JPASpecification的文档没有与连接多个表相关的信息。

Spring Official JPA Specification Doc

我对JPASpecification非常陌生,因此任何指导都会很有值(value)。

最佳答案

JPA 2 introduces a criteria API that you can use to build queries programmatically.

如果您使用 JPA 2 并且想要创建动态查询,我认为您应该查看 Criteria API构建动态查询。或者你可以使用JpaSpecificationExecutor(我还没有尝试过。)检查this相关问题。

附加一些有用的链接:

  1. JPA Specifications
  2. JPA Criteria Api

关于mysql - 在 Spring Boot 中生成动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50116796/

相关文章:

java - Spring Data JDBC 反转 OneToMany 导航

php - 高效查询

PHP 多重查询问题

java - Spring Kafka 与 Confluence Kafka Avro 反序列化器

spring - 为什么spring security oauth2客户端需要AuthorizationRequestRepository?

spring - 加载类 "org.slf4j.impl.StaticLoggerBinder"失败,Spring Boot

spring-data-cassandra:InvalidQueryException:无法执行此查询...使用允许过滤

java - Spring 缓存抽象(AdviceMode.ASPECTJ)在 spring-data-jpa 存储库中不起作用

mysql - 从使用不同数据库的 DbConnection 派生类

php - 更新和删除特定记录