在最新的Eclipse版本中,JPA验证似乎有些奇怪。它抱怨以下表达式:
错误提示:
IN表达式没有有效的左表达式。
我认为这是错误的。查询按预期方式工作,因此这似乎是Eclipse错误,对吗?还是您有另一个主意,为什么会发生此错误?
我不确定这个错误是来自JBoss工具还是直接来自Eclipse验证。我可以说是这个验证器:
答案 0 :(得分:1)
根据定义-即the JPA specification¹文档,又名JSR 338-JPQL允许使用诸如LOWER(..)
之类的功能。这些被定义为“保留的标识符”(请参阅第4.4.1节“标识符” ,第172页):
以下是保留的标识符:
ABS,ALL和AND,AS,ASC,AVG,之间, BIT_LENGTH [59],BOTH,BY,CASE,CHAR_LENGTH,CHARACTER_LENGTH,CLASS,COALESCE,CONCAT,COUNT,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP, DELETE,DESC,DISTINCT,ELSE,EMPTY,END,ENTRY,ESCAPE,EXISTS,FALSE,FETCH, 从,功能,组,具有,在,索引,内部,是,加入,关键,领先,向左, LENGTH,LIKE,LOCATE, LOWER ,MAX,MEMBER,MIN,MOD,NEW,NOT,NULL,NULLIF, 对象,对象,上,或,顺序,外部,位置,选择,设置,大小,一些,SQRT,SUBSTRING,SUM,然后,拖尾,处理,TRIM,TRUE,TYPE,未知,更新,UPPER, 值,时间,地点。
在第193f页的 4.6.17.2.1字符串函数部分中,对函数LOWER(string_expression)
进行了更详细的描述。 JPA规范文档指出:
关于数据库的语言环境, LOWER 和UPPER函数分别将字符串转换为小写和大写。他们返回一个字符串。
因此,JPA查询语言的 BNF 将LOWER定义为关键字。
对于您所安装的版本,Eclipse,各自的JPA查询验证器或其他工具中的错误似乎很可能。您可能会考虑检查Eclipse的错误跟踪器或升级到Eclipse 2019 +。
希望有帮助。
-
¹在2.2版或之前的2.1 / 2.0版中