如何将多个日期之间的搜索与 Spring Data JPA 的 CrudRepository 结合起来?

Posted

技术标签:

【中文标题】如何将多个日期之间的搜索与 Spring Data JPA 的 CrudRepository 结合起来?【英文标题】:How to combine multiple date-between searches with CrudRepository of Spring Data JPA? 【发布时间】:2014-11-10 06:44:52 【问题描述】:

spring-data 提供了一种通过定义方法名来生成 SQL 搜索的方法。

以下工作正常:

@Entity
public class Book 
  Date from, to;


//CrudRepository<Book>
findByFromDateBetween(Date departure, Date arrival);

但是为什么下面的方法不起作用呢?

findByFromDateBetweenAndToDateBetween(Date departure, Date arrival);

要连接两个日期搜索,我必须重复日期:

findByFromDateBetweenAndToDateBetween(Date departure, Date arrival, Date departure, Date arrival);

问题:是否可以重用参数?

【问题讨论】:

【参考方案1】:

Between 关键字自然绑定了两个参数。因此绑定from子句后,参数列表就用完了,我们不知道第二个条件使用哪些参数。

手动定义的查询应该可以解决问题:

interface BookRepository extends Repository<Book, Integer> 

  @Query("select b from Book b " +
         "where b.from between ?1 and ?2 and b.to between ?1 and ?2")
  List<Book> findByDatesBetween(Date departure, Date arrival);

【讨论】:

以上是关于如何将多个日期之间的搜索与 Spring Data JPA 的 CrudRepository 结合起来?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spring Data JPA 持久化 JSR-310 类型?

使用 Spring Data JPA 获取两个日期之间的记录

使用日期参数时的 Spring Data JPA 日期“之间”查询问题

Spring data jpa Specification查询关于日期的范围搜索

Spring Data JPA如何传递日期参数

具有多个字段和日期的 Spring Data Paging and Sorting Repository