SpringBootJpa в предложении с subMatching - PullRequest
1 голос
/ 26 мая 2019

Как подать заявку как в предложении в весенней загрузке jpa. Ниже приведен класс.

@Table(name="media")
public class Media {

 @NotBlank
 private String url;

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 Long id;

 @ElementCollection
 private Set<String> tagList = new HashSet<String>();

 public Media(String urlString) {
      this.url = urlString ;
 }
}

Например, если есть строка с tagList ["mentos", "hurre"] и я хочу найти слова "men" или ["men", "hu"], эта строка должна появиться?Я определил метод ниже, но он возвращает строку, только если строка полностью совпадает.

Set<Media> findByTagListIn(List<String> tagList);

1 Ответ

1 голос
/ 26 мая 2019

Вам необходимо выполнить запрос по спецификации, как показано ниже:

//MediaRepository
import org.springframework.data.jpa.domain.Specification;
...
List<Media> findAll(Specification<Media> spec);

и создать эту спецификацию в классе обслуживания.

//MediaService
List<Media> findMediaByTags(List<String> tags){

Specification<Media> specification = (Specification<Media>) (root, query, criteriaBuilder) -> {
  Predicate predicate = criteriaBuilder.conjunction();
  for (String tag : tags) {
    predicate = criteriaBuilder.and(predicate,
        criteriaBuilder.isMember(tag, root.get("tags")));
  }
  return predicate;
};
return mediaRepository.findAll(specification);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...