(注意:我已经编辑了我的原帖以简化它)
我无法解决涉及SUBSTR功能的JPQL查询中的语法错误。我正在使用eclipselink 2.3.2。
具体来说,我想提出一个与这种sql查询等效的JPQL:
select * from Table1 t where SUBSTR(t.someStringField, 91, 5) like 'abc'
我编写了以下JPQL查询(看起来非常像原始的sql副本):
select t from Table1 t where SUBSTR(t.someStringField, 91,5) like 'abc'
(注意:为了清楚起见,我用伪代码形式编写它;查询中有更多的子句,但它们似乎与手头的问题无关,所以我把它剥离到了裸露的最小值)
创建查询时出现以下语法错误:
引起:异常[EclipseLink-8025](Eclipse Persistence Services - 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.JPQLException 异常描述:语法错误解析查询[],第1行,第172列:意外令牌[(]。 内部异常:NoViableAltException(83 @ [()*环回383:9 :( d = DOT右=属性)*]) at org.eclipse.persistence.exceptions.JPQLException.unexpectedToken(JPQLException.java:372) at org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.handleRecognitionException(JPQLParser.java:320) 在org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.addError(JPQLParser.java:246) 在org.eclipse.persistence.internal.jpa.parsing.jpql.JPQLParser.reportError(JPQLParser.java:363) 在org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.pathExprOrVariableAccess(JPQLParser.java:1436) 在org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticPrimary(JPQLParser.java:4720) 在org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticFactor(JPQLParser.java:4660) 在org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticTerm(JPQLParser.java:4546) 在org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.simpleArithmeticExpression(JPQLParser.java:4462) 在org.eclipse.persistence.internal.jpa.parsing.jpql.antlr.JPQLParser.arithmeticExpression(JPQLParser.java:4402)
等...
由于我正在考虑以最简单的形式测试SUBSTR的使用,我开始相信eclipselink支持使用SUBSTR 不,尽管它是JPA的一部分2.0根据官方文档。
任何人都可以确认上述假设,否则拒绝它,告诉我这些查询的语法有什么问题,并希望建议一些替代方案? 提前致谢。
答案 0 :(得分:1)
这完全是我的错误。在查看JPA文档时,我似乎错过了子串函数实际上是SUBSTRING而不是JPA中的SUBSTR这一事实(与SQL相反):-(。所以这解释了为什么无论我多少次将我的查询重写为简化它,我仍会得到同样的错误。感谢阅读!