Java JPA CONCATE与IN运算符一起使用时引发异常

Java JPA CONCATE与IN运算符一起使用时引发异常,java,jpa,jpql,openjpa,Java,Jpa,Jpql,Openjpa,我正在尝试运行一个复杂的JPQL查询,它不会抛出异常并且工作异常 这是我的问题 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

我正在尝试运行一个复杂的JPQL查询,它不会抛出异常并且工作异常

这是我的问题

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:遇到b。主键。col1不在选择中。主键。表3 a中的col1,其中CONCAT a。主键。tagId,\'ayush\'位于字符249处,但应为:[,*,+,-,,/,:,=R、 选择、设置、大小、部分、SQRT、子字符串、总和、尾随、修剪、更新、上限、其中、、]。 位于org.apache.openjpa.kernel.jpql.jpql.generateParseExceptionJPQL.java:9566 在org.apache.openjpa.kernel.jpql.jpql.jj_consume_tokenJPQL.java:9443 位于org.apache.openjpa.kernel.jpql.jpql.conditional_primaryJPQL.java:1947 位于org.apache.openjpa.kernel.jpql.jpql.conditional_factorJPQL.java:1925 位于org.apache.openjpa.kernel.jpql.jpql.conditional_termJPQL.java:1791 位于org.apache.openjpa.kernel.jpql.jpql.conditional_expressionJPQL.java:1753 位于org.apache.openjpa.kernel.jpql.jpql.conditional_primaryJPQL.java:1942 位于org.apache.openjpa.kernel.jpql.jpql.conditional_factorJPQL.java:1925 位于org.apache.openjpa.kernel.jpql.jpql.conditional_termJPQL.java:1791 位于org.apache.openjpa.kernel.jpql.jpql.conditional_termJPQL.java:1804 位于org.apache.openjpa.kernel.jpql.jpql.conditional_termJPQL.java:1804 位于org.apache.openjpa.kernel.jpql.jpql.conditional_termJPQL.java:1804 位于org.apache.openjpa.kernel.jpql.jpql.conditional_termJPQL.java:1804 位于org.apache.openjpa.kernel.jpql.jpql.conditional_termJPQL.java:1804 位于org.apache.openjpa.kernel.jpql.jpql.conditional_termJPQL.java:1804 位于org.apache.openjpa.kernel.jpql.jpql.conditional_expressionJPQL.java:1753 在org.apache.openjpa.kernel.jpql.jpql.where_clauseJPQL.java:1556 在org.apache.openjpa.kernel.jpql.jpql.select_statementJPQL.java:91 位于org.apache.openjpa.kernel.jpql.jpql.parseQueryJPQL.java:63 位于org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.parseJPQLExpressionBuilder.java:1740 位于org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL.JPQLExpressionBuilder.java:1727 位于org.apache.openjpa.kernel.jpql.JPQLParser.parseJPQLParser.java:48 位于org.apache.openjpa.kernel.ExpressionStoreQuery.newcommpilationexpressionstorequery.java:152 java:657 位于org.apache.openjpa.kernel.QueryImpl.compileationfromCacheQueryImpl.java:639 位于org.apache.openjpa.kernel.QueryImpl.compileForCompilationQueryImpl.java:605 java:667 位于org.apache.openjpa.kernel.QueryImpl.getOperationQueryImpl.java:1492 位于org.apache.openjpa.kernel.DelegatingQuery.getOperationDelegatingQuery.java:123 位于org.apache.openjpa.persistence.QueryImpl.executeQueryImpl.java:243 位于org.apache.openjpa.persistence.QueryImpl.getResultListQueryImpl.java:294

yyy中的xxx应该是{someCollection}中的{someValue}。您的右侧没有集合,因此出现异常。如果您的查询现在确实在右侧有一个集合,但它不在您的帖子中,并且您仍然得到一个异常,那么发布实际的异常+堆栈跟踪。如果xxx和yyy应该相等,那么您在yyy中使用=

xxx应该是{someValue}在{someCollection}中。您的右侧没有集合,因此出现异常。如果您的查询现在确实在右侧有一个集合,但它不在您的帖子中,并且您仍然得到一个异常,则发布实际的异常+堆栈跟踪。如果xxx和yyy应该相等,则使用=

    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'))
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)))