【发布时间】:2014-03-08 23:10:15
【问题描述】:
如何将下面的 SQL 转换为 JPQL?
SELECT *
FROM SSSRC.NAME_TEST nameTest
LEFT JOIN TTREFERENCE.LOCATION location
ON nameTest.place= location.location_name WHERE nameTest.gender = 'Male'
AND nameTest.age= '50'
AND nameTest.name IS NOT NULL
ORDER BY nameTest.sortby ,location.location_order;
我是这样转换的
"SELECT nameTest FROM NameTest nameTest, LEFT JOIN Location location ON nameTest.place = location.location_name WHERE nameTest.age= '50' and nameTest.gender = 'Male' and nameTest.name IS NOT NULL ORDER BY nameTest.sortby ,location.location_order";
但是
它不工作它给出以下错误
Exception in thread "main" <openjpa-2.0.0-r422266:935683 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: "Encountered "location" at character 66, but expected: [",", "GROUP", "HAVING", "INNER", "JOIN", "LEFT", "ORDER", "WHERE", <EOF>]." while parsing JPQL "SELECT nameTest FROM PrintRequest nameTest, LEFT JOIN LOCATION location ON nameTest.place = location.location_name WHERE nameTest.age= '50' and nameTest.gender = 'Male' and nameTest.name IS NOT NULL ORDER BY nameTest.sortby ,location.location_order";. See nested stack trace for original parse error.
at org.apache.openjpa.kernel.jpql.JPQLParser.parse(JPQLParser.java:51)
at org.apache.openjpa.kernel.ExpressionStoreQuery.newCompilation(ExpressionStoreQuery.java:150)
at org.apache.openjpa.kernel.QueryImpl.newCompilation(QueryImpl.java:670)
at org.apache.openjpa.kernel.QueryImpl.compilationFromCache(QueryImpl.java:652)
at org.apache.openjpa.kernel.QueryImpl.compileForCompilation(QueryImpl.java:618)
at org.apache.openjpa.kernel.QueryImpl.compileForExecutor(QueryImpl.java:680)
at org.apache.openjpa.kernel.QueryImpl.compile(QueryImpl.java:587)
at org.apache.openjpa.persistence.EntityManagerImpl.createQuery(EntityManagerImpl.java:985)
【问题讨论】:
-
去掉“NameTest”和“LEFT JOIN”之间的“,”