Предложение IN со спецификацией весенней загрузки для списка строк - PullRequest
2 голосов
/ 29 мая 2019

У меня есть таблица 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;
            }
        };
    }
}

}

1 Ответ

0 голосов
/ 29 мая 2019

Вы можете использовать JPA's Repository Like query method, например:

Добавить этот метод в MediaRepository

List<Media> findByTagListContaining(String inputTag);

, а затем вызвать его из вашего метода, как

List<Media> cases = mediaRepo.findByTagListContaining(inputTag);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...