JPQL查询含保留关键字set字段报错,如何解决?
解决JPQL中字段名是保留关键字的问题
嘿,这个问题我太熟了!不用急着重命名字段,JPQL本身就支持转义保留关键字,不同JPA实现有对应的语法,给你具体的解决办法:
Hibernate(及多数主流JPA实现)的转义方式:用反引号(`)把冲突的字段名包起来就行。你的查询语句修改后是这样:
select e from CrmSetText e where e.`set`.id = 1这样Hibernate的JPQL解析器就会把
set识别成实体字段,而不是JPQL的保留关键字了。EclipseLink 的特殊转义:如果你的项目用的是EclipseLink,得用双引号(")来包裹字段名,语句改成:
select e from CrmSetText e where e."set".id = 1备选方案:重命名字段(万不得已才用):如果转义后还是有兼容问题(比如跨多个JPA实现的复杂场景),再考虑重命名字段。可以在实体类里把字段名改成
crmSet之类的,然后通过@Column(name = "set")注解映射到数据库原有的set列,这样既避开了关键字冲突,又不用修改数据库结构。
顺带说下,你遇到的JpqlSyntaxException本质就是JPQL解析器把set当成了语法关键字(比如JPQL更新语句里的SET),转义后就能绕开这个解析错误啦。
内容的提问来源于stack exchange,提问作者blep
相关产品推荐
相关产品推荐

