Если я не ошибаюсь, невозможно иметь запросы как like in (a, b, c)
.В вашем случае вам придется либо сделать что-то вроде этого:
@Query("select m from MyEntity m where m.name like ?1 or m.name like ?2 or m.name like ?3")
List<MyEntity> findByNameContaining(String match1, String match2, String match3);
Это довольно ограниченно, хотя, конечно, если вы ожидаете динамический список like ...
предложений.
В качестве альтернативы, вы можете работать со спецификациями:
public static Specification<MyEntity> findByNameContaining(List<String> matches) {
return (root, query, cb) -> cb.or(matches
.stream()
.map(match -> cb.like(root.get("name"), match))
.toArray(Predicate[]::new));
}
В этом случае вам нужно убедиться, что ваш репозиторий расширяет интерфейс JpaSpecificationExecutor
, а затем вы можете назвать его так:
repository.findAll(findByNameContaining(..));