У меня есть таблица Media
, в которой есть столбец «tagList», содержащий список строк.Я пытаюсь написать спецификацию для поискового запроса.
Ниже спецификация работает нормально, если inputTag
равно mentos
, а tagList равен ["mentos", "bollywood", "cinema"], но если inputTag равен«мужчины» не возвращают ни одного ряда.Как заменить isMember на in, чтобы он соответствовал и подстроке.
Это код:
public class MediaRepositoryService {
@PersistenceContext
private EntityManager entityManager;
@Autowired
private MediaRepository mediaRepo;
@Transactional
public List<Media> searchMedia(final String inputTag) {
List<Media> cases = mediaRepo.findAll(MediaSearchSpecificaton.findByCriteria(inputTag));
return cases;
}
private static class MediaSearchSpecificaton {
private static Specification<Media> findByCriteria(String inputTag) {
return new Specification<Media>() {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public Predicate toPredicate(Root<Media> root, CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
Predicate predicate = criteriaBuilder.conjunction();
predicate = criteriaBuilder.and(predicate, criteriaBuilder.isMember(inputTag, root.get("tagList")));
return predicate;
}
};
}
}
}