Spring Data JPA:如何形成条件查询?

问题描述 投票:0回答:2

考虑一个包含 4 个字段的表:id、name、age、date。现在我想使用这些字段查找数据库。所以这很简单,我可以做到:

@Query("select d from data d where d.name=:name and d.age=:age and d.date=:date")

但问题是,姓名、年龄和日期是可选字段,即年龄、姓名、日期可以为空。如果年龄为空,那么我应该使用名称和日期查找数据库,如果年龄和名称为空,那么我应该单独使用日期查找数据库等等...

是否可以通过简单的方式实现这一点,而不是为每个场景形成不同的查询?因为我正在处理的真实场景有 6-7 个可选字段,并且为每个字段形成不同的查询看起来非常奇怪。

mysql spring spring-boot jpa spring-data-jpa
2个回答
13
投票

对于可选字段,请使用以下内容:

@Query("select d from data d 
         where (:name is null or d.name=:name) 
           and (:age is null or d.age=:age)
           and (:date is null or d.date=:date)") 

0
投票

这是一个非常常见的需求,我们需要基于搜索参数或自定义条件的休眠查询结果。

引入JPA后,这样的查询就很难写了。

但是有一种方法可以让您根据条件创建自定义查询。

使用 EntityManager 它将帮助您执行 HQL 和 Native 查询,并且您的进一步实现将保持不变。 在您的实现中声明 EntityManager 对象,然后使用其方法根据查询获取数据,

@PersistenceContext
EntityManager entityManager;

执行您的查询:

entityManager
    .createQuery(queryString);

重要的一点:如果您有要求 对于分页,它不会为您提供总记录数,您可以通过调用 JPA Page 对象的 getTotalElements() 方法轻松获得该总记录数。 在此实现中,如果您还需要总计数,则必须为计数调用单独的查询。

查看详细示例: 向 Spring 数据存储库添加自定义功能

© www.soinside.com 2019 - 2024. All rights reserved.