Spring CrudRepository findByInventoryIds (List <Long> inventoryIdList) - эквивалент предложения IN
В Spring CrudRepository есть ли у нас поддержка "IN clause" для поля? т.е. что-то похожее на следующее?
findByInventoryIds(List<Long> inventoryIdList)
Если такая поддержка недоступна, какие изящные варианты можно рассмотреть? Запросы об увольнении для каждого идентификатора могут быть не оптимальными.
Ответы
Ответ 1
findByInventoryIdIn(List<Long> inventoryIdList)
должен сделать трюк.
Формат параметра запроса HTTP будет таким:
Yes ?id=1,2,3
No ?id=1&id=2&id=3
Полный список ключевых слов репозитория JPA можно найти в текущем списке документации. Это показывает, что IsIn
эквивалентен - если вы предпочитаете глагол для удобочитаемости - и JPA также поддерживает NotIn
и IsNotIn
.
Ответ 2
Для любого метода в Spring CrudRepository вы должны иметь возможность указать @Query самостоятельно. Что-то вроде этого должно работать:
@Query( "select o from MyObject o where inventoryId in :ids" )
List<MyObject> findByInventoryIds(@Param("ids") List<Long> inventoryIdList);
Ответ 3
Да, это поддерживается.
Проверьте предоставленную документацию здесь для поддерживаемых ключевых слов внутри имен методов.
Вы можете просто определить метод в интерфейсе репозитория без использования аннотации @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);
}