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