web-dev-qa-db-ja.com

複数の日付間検索をSpringData JPAのCrudRepositoryと組み合わせる方法は?

spring-dataは、メソッド名を定義することによってSQL検索を生成する方法を提供します。

以下は正常に機能します。

@Entity
public class Book {
  Date from, to;
}

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

しかし、なぜ次のことが機能しないのですか?

findByFromDateBetweenAndToDateBetween(Date departure, Date arrival);

2つの日付検索を接続するには、日付を繰り返す必要があります。

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

質問:パラメータを再利用することは可能ですか?

8
membersound

Betweenキーワードは、当然2つのパラメーターをバインドします。したがって、from句をバインドした後、パラメータリストが使い果たされ、2番目の基準に使用するパラメータがわかりません。

手動で定義されたクエリでうまくいくはずです。

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);
}
10
Oliver Drotbohm