Spring CrudRepository findByInventoryIds (List <Long> inventoryIdList)-IN 절과 동일 inventoryIdList) 그러한 지원을 이용할 수

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

인벤토리 엔티티와 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);

}