Как я могу найти сущность, заданную списком значений для другой сущности, которая связана с первой отношением «Многие ко многим»?

#spring-boot #jpa #many-to-many #jpql

Вопрос:

В моем проекте Springboot мне нужно реализовать функцию поиска проектов. Каждый проект может содержать несколько тегов, и каждый тег может быть частью многих проектов (от многих до многих). Учитывая список тегов, мне нужно найти проект, который содержит все эти теги (акцент на ВСЕХ). Я пробовал использовать спецификацию JPA и запросы, но мне это не удается.

 public class Project implements Serializable {
@ManyToMany(cascade = CascadeType.ALL)
@LazyCollection(LazyCollectionOption.FALSE)
@NotNull
@NotEmpty
@Size(min = 1, max = 5)
private List<Tag> tags;
}
 

У каждого тега есть имя, которое должно быть значением, используемым для их поиска. Я попытался использовать подзапросы и существующее предложение следующим образом: для каждого значения тега я делаю подзапрос, чтобы проверить, существует ли он, но я считаю, что это не работает, потому что я не указываю, что тег должен принадлежать родительскому запросу (проекту), и я не знаю, как это сделать с отношением «многие ко многим». Чтобы быть более ясным, я не могу сделать следующее:

Выберите p из проекта p, где он существует(Выберите тег Из тега, где имя=»значение» и projectId=p.id)

Любая помощь была бы полезна

Комментарии:

1. Если вы можете составить ER-диаграмму, ее легко преобразовать в сущности в JPA.