Spring CrudRepositoryでは、フィールドに対して "IN句"をサポートしていますか?すなわち次のようなもの?
findByInventoryIds(List<Long> inventoryIdList)
そのようなサポートが利用できない場合、どんな優雅な選択肢が考慮されることができますか?各IDに対してクエリを実行するのは最適ではないかもしれません。
findByInventoryIdIn(List<Long> inventoryIdList)
がうまくいくはずです。
HTTPリクエストパラメータのフォーマットは次のようになります。
Yes ?id=1,2,3
No ?id=1&id=2&id=3
JPAリポジトリのキーワードの完全なリストは 現在のドキュメント一覧 にあります。読みやすくするために動詞を使用する場合はIsIn
が同等であり、JPAもNotIn
およびIsNotIn
をサポートしていることがわかります。
Spring CrudRepositoryのどのメソッドでも、@Queryを自分で指定できるはずです。このようなものでうまくいくはずです。
@Query( "select o from MyObject o where inventoryId in :ids" )
List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
はい、それはサポートされています。
メソッド名の中でサポートされているキーワードについては、提供されているドキュメント ここ を確認してください。
@ Queryアノテーションを使用せずにカスタムクエリを記述しなくても、リポジトリインターフェイスでメソッドを定義できます。あなたの場合は、それは次のようになります。
List<Inventory> findByIdIn(List<Long> ids);
InventoryエンティティとInventoryRepositoryインターフェイスがあるとします。あなたの場合のコードは次のようになります。
エンティティ
@Entity
public class Inventory implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
// other fields
// getters/setters
}
リポジトリ
@Repository
@Transactional
public interface InventoryRepository extends PagingAndSortingRepository<Inventory, Long> {
List<Inventory> findByIdIn(List<Long> ids);
}