Уважаемые, у меня проблема с работой с запросом JPQL, когда я работаю с IN и List (Long), я получаю сообщение об ошибке, но не всегда
это модель (является минимальной моделью для просмотра отношений, без всех столбцов)
, и если я делаю этот запрос в mi repo, то работает нормально:
@Query(value = "SELECT a FROM Artist a WHERE a.idArtist IN(SELECT a.idArtist FROM ArtistStyle x "
+ "INNER JOIN x.style s "
+ "INNER JOIN x.artist a "
+ "WHERE s.idStyle IN (:arrayStyles))")
public List<Artist> FilterArtistWithStyles(List<Long> arrayStyles);
, но если я делаю этот запрос, я получаю и ошибку:
@Query(value = "SELECT a FROM Artist a WHERE a.idArtist IN(SELECT a.idArtist FROM ArtistStyle x "
+ "INNER JOIN x.style s "
+ "INNER JOIN x.artist a "
+ "INNER JOIN a.country c "
+ "INNER JOIN a.aal1 a1 "
+ "INNER JOIN a.aal2 a2 "
+ "INNER JOIN a.aal3 a3 "
+ "WHERE (:arrayStyles IS NULL OR s.idStyle IN (:arrayStyles)) "
+ "AND (:name IS NULL OR a.name like %:name%)" + "AND (:gender IS NULL OR a.gender = :gender) "
+ "AND (:experienceFrom IS NULL OR a.workStartYear <= :experienceFrom) "
+ "AND (:ratingFrom IS NULL OR a.ratingAccordance >= :ratingFrom) "
+ "AND (:delivery IS NULL OR a.delivery = :delivery) "
+ "AND (:exchange IS NULL OR a.exchange = :exchange) " + "AND (:courses IS NULL OR a.courses = :courses)"
+ "AND (:idCountry IS NULL OR c.idCountry = :idCountry)"
+ "AND (:idAal1 IS NULL OR a1.idAdministrativeAreaLevel1 = :idAal1)"
+ "AND (:idAal2 IS NULL OR a2.idAdministrativeAreaLevel2 = :idAal2)"
+ "AND (:idAal3 IS NULL OR a3.idAdministrativeAreaLevel3 = :idAal3)" + ")")
public List<Artist> SearchArtistWithStyles(String name, List<Long> arrayStyles, Integer gender, Integer experienceFrom, Double ratingFrom, Integer delivery,
Integer exchange, Integer courses, Long idCountry, Long idAal1, Long idAal2, Long idAal3,
Pageable pageable);
это ошибка:
"status": 500,
"error": "Internal Server Error",
"message": "org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: {vector} [SELECT a FROM com.mushroomstudios.skink.entities.Artist a WHERE a.idArtist IN(SELECT a.idArtist FROM com.mushroomstudios.skink.entities.ArtistStyle x INNER JOIN x.style s INNER JOIN x.artist a INNER JOIN a.country c INNER JOIN a.aal1 a1 INNER JOIN a.aal2 a2 INNER JOIN a.aal3 a3 WHERE (:arrayStyles_0, :arrayStyles_1, :arrayStyles_2 IS NULL OR s.idStyle IN (:arrayStyles_0, :arrayStyles_1, :arrayStyles_2)) AND (:name IS NULL OR a.name like :name)AND (:gender IS NULL OR a.gender = :gender) AND (:experienceFrom IS NULL OR a.workStartYear <= :experienceFrom) AND (:ratingFrom IS NULL OR a.ratingAccordance >= :ratingFrom) AND (:delivery IS NULL OR a.delivery = :delivery) AND (:exchange IS NULL OR a.exchange = :exchange) AND (:courses IS NULL OR a.courses = :courses)AND (:idCountry IS NULL OR c.idCountry = :idCountry)AND (:idAal1 IS NULL OR a1.idAdministrativeAreaLevel1 = :idAal1)AND (:idAal2 IS NULL OR a2.idAdministrativeAreaLevel2 = :idAal2)AND (:idAal3 IS NULL OR a3.idAdministrativeAreaLevel3 = :idAal3)) order by a.name asc]; nested exception is java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: {vector} [SELECT a FROM com.mushroomstudios.skink.entities.Artist a WHERE a.idArtist IN(SELECT a.idArtist FROM com.mushroomstudios.skink.entities.ArtistStyle x INNER JOIN x.style s INNER JOIN x.artist a INNER JOIN a.country c INNER JOIN a.aal1 a1 INNER JOIN a.aal2 a2 INNER JOIN a.aal3 a3 WHERE (:arrayStyles_0, :arrayStyles_1, :arrayStyles_2 IS NULL OR s.idStyle IN (:arrayStyles_0, :arrayStyles_1, :arrayStyles_2)) AND (:name IS NULL OR a.name like :name)AND (:gender IS NULL OR a.gender = :gender) AND (:experienceFrom IS NULL OR a.workStartYear <= :experienceFrom) AND (:ratingFrom IS NULL OR a.ratingAccordance >= :ratingFrom) AND (:delivery IS NULL OR a.delivery = :delivery) AND (:exchange IS NULL OR a.exchange = :exchange) AND (:courses IS NULL OR a.courses = :courses)AND (:idCountry IS NULL OR c.idCountry = :idCountry)AND (:idAal1 IS NULL OR a1.idAdministrativeAreaLevel1 = :idAal1)AND (:idAal2 IS NULL OR a2.idAdministrativeAreaLevel2 = :idAal2)AND (:idAal3 IS NULL OR a3.idAdministrativeAreaLevel3 = :idAal3)) order by a.name asc]",
наконец, если я сделаю этот запрос, тоже будет работать хорошо:
@Query(value = "SELECT a FROM Artist a " + "INNER JOIN a.country c "
+ "INNER JOIN a.aal1 a1 "
+ "INNER JOIN a.aal2 a2 "
+ "INNER JOIN a.aal3 a3 "
+ "WHERE (:name IS NULL OR a.name like %:name%) "
+ "AND (:gender IS NULL OR a.gender = :gender) "
+ "AND (:experienceFrom IS NULL OR a.workStartYear <= :experienceFrom) "
+ "AND (:ratingFrom IS NULL OR a.ratingAccordance >= :ratingFrom) "
+ "AND (:delivery IS NULL OR a.delivery = :delivery) "
+ "AND (:exchange IS NULL OR a.exchange = :exchange) " + "AND (:courses IS NULL OR a.courses = :courses)"
+ "AND (:idCountry IS NULL OR c.idCountry = :idCountry)"
+ "AND (:idAal1 IS NULL OR a1.idAdministrativeAreaLevel1 = :idAal1)"
+ "AND (:idAal2 IS NULL OR a2.idAdministrativeAreaLevel2 = :idAal2)"
+ "AND (:idAal3 IS NULL OR a3.idAdministrativeAreaLevel3 = :idAal3)")
public List<Artist> SearchArtist(String name, Integer gender, Integer experienceFrom, Double ratingFrom,
Integer delivery, Integer exchange, Integer courses, Long idCountry, Long idAal1, Long idAal2, Long idAal3,
Pageable pageable);
есть что-то плохое ввторой запрос? Если вам нужна дополнительная информация, такая как сущность или другое, пожалуйста, дайте мне знать, заранее спасибо