Я пытаюсь запустить сложный JPQL QUERY, который не выбрасывает Exception и работает странно.JPA CONCATE при использовании с вызовом оператора IN Исключение
Так вот мой запрос
SELECT b.pk.col1, b.pk.col2
FROM table1 b
WHERE b.pk.col2 IN ('someString')
AND b.pk.col3 IN (0, 1, 2)
AND b.pk.sdate < :now
AND b.edate > :now
AND b.col4 = 1
AND EXISTS
(SELECT a.cmid
FROM table2 a
WHERE a.col1 = 5 AND a.col2 = b.pk.col1)
AND b.pk.col1 NOT IN
(SELECT a.pk.col1
FROM table3 a
WHERE CONCAT (a.pk.tagid, 'ayush') IN ('1ayush'))
почему-то кидает ошибку на последней строке. Здесь ошибка
данные Исключение: org.apache.openjpa.persistence.ArgumentException:.. Встречающиеся «б рк COL1 NOT IN (выберите рк col1 ИЗ Table3 а где CONCAT (а рк.... tagId, \ 'ayush \') IN ("при знаке 249, но ожидается: [" (",") "," * "," + ",", "," - ",". ","/",": "," < "," < = "," <> "," = ","> ","> "", "?", "ABS", "ALL", "AND", " ЛЮБОЙ »,« AS »,« ASC »,« AVG », « МЕЖДУ »,« ОБО »,« BY »,« CONCAT »,« COUNT »,« CURRENT_DATE »,« CURRENT_TIME »,« CURRENT_TIMESTAMP »,« DELETE »,« DESC »,« DISTINCT »,« EMPTY »,« ESCAPE »,« EXISTS »,« FETCH »,« FROM », « GROUP »,« HAVING »,« IN »,« INNER »,« IS », , «ПРИСОЕДИНЯЙТЕСЬ», «ВЕДУЩИЙ», «ВЛЕВО», «L «НОМЕР», «НРАВИТСЯ», «ЛОКАЛЬНЫЙ», «НИЖНИЙ», «МАКС», «ЧЛЕН», «МИН», «МОД», «НОВЫЙ», «НЕ», «НУЛЛ», «ОБЪЕКТ», «OF »,« OR »,« ORDER »,« OUTER »,« SELECT »,« SET »,« SIZE »,« SOME »,« SQRT »,« SUBSTRING »,« SUM »,« TRAILING »,« TRIM », «UPDATE», «UPPER», «WHERE»,,,,,].
Я сокрушил запрос на несколько строк для ясности:
Это запрос в одной строке
SELECT b.pk.col1, b.pk.col2
FROM table1 b
WHERE b.pk.col2 IN ('someString')
AND b.pk.col3 IN (0, 1, 2)
AND b.pk.sdate < :now
AND b.edate > :now
AND b.col4 = 1
AND EXISTS
(SELECT a.cmid
FROM table2 a
WHERE a.col1 = 5 AND a.col2 = b.pk.col1)
AND b.pk.col1 NOT IN
(SELECT a.pk.col1
FROM table3 a
WHERE CONCAT (a.pk.tagid, 'ayush') IN ('1ayush'))
Я забыл упомянуть, что если я пытаюсь использовать =
вместо IN
, запрос работает, однако это был демонстрационный запрос, и я действительно должен использовать Список там
EDIT: Это мой новый JPA QUERY, к которому я даю коллекции, а не какой-то жесткий кодированный значение
SELECT b.pk.col1, b.pk.col2
FROM table1 b
WHERE b.pk.col2 IN ('someString')
AND b.pk.col3 IN (0, 1, 2)
AND b.pk.sdate < :now
AND b.edate > :now
AND b.col4 = 1
AND EXISTS
(SELECT a.cmid
FROM table2 a
WHERE a.col1 = 5 AND a.col2 = b.pk.col1)
AND (b.pk.col1 NOT IN
(SELECT a.pk.col1
FROM table3 a
WHERE CONCAT (a.pk.tagid, 'ayush') IN (:somelist)))
И я все еще получаю же исключение
Exception данные: org.apache.openjpa.persistence .ArgumentException: Encounted "b. pk. col1 NOT IN (выберите a. pk. col1 FROM Table3 a где CONCAT (a .pk. tagId, \ 'ayush \') IN "в символе 249, но ожидается: [" (",") "," * "," "+", ",", "-", ".", "/", ":", "<", "< =", "<>", "=", ">", "> =" , «АБС», «АБС», «ВСЕ», «И», «ЛЮБЫЕ», «КАК», «АСК», «АВГ», «МЕЖДУ», «ОБО», «В», «КОНКАТ», COUNT "," CURRENT_DATE "," CURRENT_TIME "," CURRENT_TIMESTAMP "," DELETE "," DESC "," DISTINCT "," EMPTY "," ESCAPE "," EXISTS "," FETCH "," FROM "," GROUP " «ВХОД», «В», «ВНУТРЕННИЙ», «ИС», «ПРИСОЕДИНЯЙТЕСЬ», «ВЕДУЩИЙ», «ВЛЕВО», «ДЛИНА», «НРАВИТСЯ», «ЛОКАЛЬНЫЙ», «НИЖНИЙ», «МАКС», MEMBER »,« MIN »,« MOD »,« NEW »,« NOT »,« NULL »,« OBJECT »,« OF »,« OR »,« ORDER »,« OUTER »,« SELECT »,« SET », «SIZE», «SOME», «SQRT», «SUBSTRING», «SUM», «TRAILING», «TRIM», «UPDATE», «UPPER», «WHERE»,,,,]. at org .apache.openjpa.kernel.jpql.JPQL.generateParseException (JPQL.java:9566) at org.apache.openjpa.kerne l.jpql.JPQL.jj_consume_token (JPQL.java:9443) at org.apache.openjpa.kernel.jpql.JPQL.conditional_primary (JPQL.java:1947) at org.apache.openjpa.kernel.jpql.JPQL. conditional_factor (JPQL.java:1925) at org.apache.openjpa.kernel.jpql.JPQL.conditional_term (JPQL.java:1791) at org.apache.openjpa.kernel.jpql.JPQL.conditional_expression (JPQL.java:1753) at org.apache.openjpa.kernel.jpql.JPQL.conditional_primary (JPQL.java:1942) at org.apache.openjpa.kernel.jpql.JPQL.conditional_factor (JPQL.java: 1925) at org.apache.openjpa.kernel.jpql.JPQL.conditional_term (JPQL.java:1791) at org.apache.openjpa.kernel.jpql.JPQL.conditional_term (JPQL.java:1804) at org. apache.openjpa.kernel.jpql.JPQL.conditional_term (JPQL.java:1804) at org.apache.openjpa.kernel.jpql.JPQL.conditional_term (JPQL.java:1804) at org.apache.openjpa.kernel. jpql.JPQL.conditional_term (JPQL.java:1804) at org.apache.openjpa.kernel.jpql.JPQL.conditional_term (JPQL.java:1804) по адресу org.apache.openjpa.kernel.jpql.JPQL.conditional_term (JPQL.java:1804) at org.apache.openjpa.kernel.jpql.JPQL.conditional_expression (JPQL.java:1753) at org.apache.openjpa.kernel.jpql.JPQL.where_clause (JPQL.java:1556) at org.apache. openjpa.kernel.jpql.JPQL.select_statement (JPQL.java:91) at org.apache.openjpa.kernel.jpql.JPQL.parseQuery (JPQL.java:63) at org.apache.openjpa.kernel.jpql. $ JPQLExpressionBuilder ParsedJPQL.parse (JPQLExpressionBuilder.java:1740) на $ org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder ParsedJPQL. (JPQLExpressionBuilder.java:1727) в org.apache.openjpa.kernel.jpql.JPQLParser.parse (JPQLParser.java:48) at org.apache.openjpa.kernel.ExpressionStoreQuery.newCompilation (ExpressionStoreQuery.java:152) at org.apache.openjpa.kernel.QueryImpl.newCompilation (QueryI mpl.java:657) на org.apache.openjpa.kernel.QueryImpl.compilationFromCache (QueryImpl.java:639) на org.apache.openjpa.kernel.QueryImpl.compileForCompilation (QueryImpl.java:605) в орг. apache.openjpa.kernel.QueryImpl.compileForExecutor (QueryImpl.java:667) на org.apache.openjpa.kernel.QueryImpl.getOperation (QueryImpl.java:1492) на org.apache.openjpa.kernel.DelegatingQuery.getOperation (DelegatingQuery.java:123) на org.apache.openjpa.persistence.QueryImpl.execute (QueryImpl.java:243) на org.apache.openjpa.persistence.QueryImpl.getResultList (QueryImpl.java:294)