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

标签 java spring postgresql spring-data-jpa

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);

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

最佳答案

Between 关键字自然地绑定(bind)了两个参数。因此在绑定(bind)了 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);
}

关于java - 如何将多个日期间隔搜索与 Spring Data JPA 的 CrudRepository 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25870095/

相关文章:

java - 检查int中的单个数字(Java)

javascript - 如何从输入字段获取值并将其值插入到另一个输入中?

java - Spring - 使用属性占位符加载位于 war 文件或类路径之外但位于文件系统中的属性文件

java - Spring 交易不起作用?

sql - 合并两个表上的连接结果

java - Spark DataFrame 和重命名多列 (Java)

java - 是否可以在编译时忽略 Java 类路径 JAR 中的运行时导入?

java - 未找到 HTTP 请求与 URI 的映射

postgresql - 为什么写在一个表中会阻止另一个表中的真空?

ruby-on-rails-3 - 使用应用程序的基础数据填充 Heroku 中的表