21

Spring Data JPA を使用しており、リポジトリにクエリを追加しようとしています。次のような @Query アノテーションなしでクエリを作成しようとしていました。

List<Item> findByTypeAndStateOrStateAndStartDateBetween(Type type, State s, State s2, Date startDate, Date endDate);

私の目標は、次のようなクエリを作成することです。

select * from item where type = ? and (state = ? or state = ?) and start_date between ? and ?

私の問題は OR 句にあります。ブラケットがあることを確認する方法はありますか?そうでなければ、ロジックは正しくありません。ここで見つけた例: http://static.springsource.org/spring-data/data-jpa/docs/1.0.0.M1/reference/html/#jpa.query-methods.query-creation

複数の列を持つ or 句は使用しないでください。

また、オブジェクトのリストを渡す方法はありますか。たとえば、3 つの状態を持つアイテムを検索したい場合、別のクエリを作成する必要がありますが、これはうまくスケーリングできません。

ありがとう。

編集:

@Query 表記を使用して状態のリストを渡す方法を見つけました。あなたはそれを次のようにします:

@Query("FROM item i WHERE i.type = ?1 AND i.state IN (?2)")

次に、2 番目のパラメーターとしてリストをメソッドに渡すだけです。@Query 表記を使用せずにこれを行う方法はまだわかりません。

4

3 に答える 3