JPQL-запрос Исключительная ситуация: неожиданный узел AST: {вектор} - PullRequest
0 голосов
/ 16 октября 2019

Уважаемые, у меня проблема с работой с запросом 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);

есть что-то плохое ввторой запрос? Если вам нужна дополнительная информация, такая как сущность или другое, пожалуйста, дайте мне знать, заранее спасибо

1 Ответ

0 голосов
/ 18 октября 2019

проблема была в этой строке

 "WHERE (:arrayStyles IS NULL OR s.idStyle IN (:arrayStyles)) "

Я изменился на, и отлично работает

+ "WHERE s.idStyle IN (:arrayStyles) "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...