Mam w aplikacji klasę
public class MovieCountry extends MovieInfo {
private CountryType country;
}
i mam z mapowaną listę tych obiektów w encji
public class MovieEntity {
private Set<MovieCountry> countries;
}
teraz\ chciałbym przefiltrować filmy, które posiadają określony kraj na liście. Mam stworzony pseudokod, który nie działa
public static Predicate getFindPredicate(
final Root<MovieEntity> root,
final CriteriaBuilder cb
final List<CountryType> countries
) {
final List<Predicate> predicates = new ArrayList<>();
if(countries != null && !countries.isEmpty()) {
final List<Predicate> orPredicates =
countries
.stream()
.map(country -> cb.equal(root.get(MovieEntity_.countries), country))
.collect(Collectors.toList());
predicates.add(cb.or(orPredicates.toArray(new Predicate[orPredicates.size()])));
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
Jak widać, chcę sprawdzić czy na liście państw encji ```
MovieEntity
MovieEntity: https://pastebin.com/CvhEQFZD metamodel MovieEntity_: https://pastebin.com/ZyJL0nmM
Chwilę pogłówkowałem i chciałem zrobić cos takiego. Stworzyłem metamodel do ```
MovieCountry
public abstract class MovieCountry_ extends MovieInfo_ {
public static volatile SingularAttribute<MovieCountry, CountryType> country;
}
i chciałem filtrowanie edytować w ten sposób
final List<Predicate> orPredicates =
countries
.stream()
.map(country -> cb.equal(root.get(MovieCountry_.country), country))
.collect(Collectors.toList());
ale IntelliJ wyświetla mi błąd
Cannot resolve method 'get(javax.persistence.metamodel.SingularAttribute<com.core.jpa.entity.movie.MovieCountry,com.common.dto.movie.CountryType>)'
https://zapodaj.net/d61aee33c2497.png.html
Jak prawidłowo sprawdzić, czy znajduje się obiekt na liście?