Spring CrudRepository findByInventoryIds (List inventoryIdList) - эквивалент в предложении
в Spring CrudRepository, есть ли у нас поддержка "в предложении" для поля? т. е. что-то подобное?
findByInventoryIds(List<Long> inventoryIdList)
если такая поддержка недоступна, какие элегантные варианты можно рассмотреть? Запуск запросов для каждого идентификатора может быть не оптимальным.
3 ответов:
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); }
Comments