Java SOUNDEX没有使用JPQL与JPA一起工作

Java SOUNDEX没有使用JPQL与JPA一起工作,java,jpa,persistence,jpql,Java,Jpa,Persistence,Jpql,我使用以下JPQL结构和SOUNDEX表达式来执行语音拼写匹配 StringBuffer nativeQuery = new StringBuffer(); nativeQuery.append("SELECT gr FROM CodeMaster gr WHERE gr.id.grcpy = ?1 AND (SOUNDEX(gr.id.sourcecode) = SOUNDEX('").append(searchValue).append("') OR SOUNDEX(gr.sourcedes

我使用以下JPQL结构和SOUNDEX表达式来执行语音拼写匹配

StringBuffer nativeQuery = new StringBuffer();
nativeQuery.append("SELECT gr FROM CodeMaster gr WHERE gr.id.grcpy = ?1 AND (SOUNDEX(gr.id.sourcecode) = SOUNDEX('").append(searchValue).append("') OR SOUNDEX(gr.sourcedescription) = SOUNDEX'").append(searchValue).append("'))")
query = getEntityManager().createQuery(nativeQuery.toString());
但是在createQuery过程中,它给了我以下错误。。如果我在这里做错了什么,请告诉我。如果我将SOUNDEX替换为UPPER,则效果良好。我还对数据库结果进行了查询,结果正常获取

SystemErr R optimum.clinicals.waf.generalFilureException: org.apache.openjpa.persistence.ArgumentException:“遇到 “SOUNDEX”(“在字符68处,但应为:[”(“,”),“*”,“+”,“-”, “,”/“,”:“,“=”,“?”,“ABS”,“ALL”, “和”、“任何”、“AS”、“ASC”、“平均”、“中间”、“两者”、“由”、“CONCAT”, “计数”、“当前日期”、“当前时间”、“当前时间戳”, “删除”、“描述”、“区分”、“空”、“转义”、“存在”、“提取”, “从”、“组”、“有”、“在”、“索引”、“内部”、“是”、“加入”, “键”、“前导”、“左”、“长”、“像”、“定位”、“下”、“最大”, “成员”、“MIN”、“MOD”、“NEW”、“NOT”、“NULL”、“OBJECT”、“OF”、“OR”, “订单”、“外部”、“选择”、“设置”、“大小”、“部分”、“SQRT”, “子字符串”、“总和”、“尾随”、“修剪”、“类型”、“更新”、“上限”, “值”,“其中”, , , 分析时,] JPQL“从信息源i中选择i,其中i.id.companynumber=?1 和(SOUNDEX(i.id.sourcecode),如?2或SOUNDEX(i.sourcedescription) 如?2 ORDER BY i.id.sourcecode“。请参阅嵌套堆栈跟踪以了解原始 分析错误


正如消息清楚地指出的那样,
SOUNDEX
不是有效的
JPQL
关键字/函数。如果确实需要调用专有的
SQL
函数,则使用
函数
关键字(如果使用JPA 2.1)。更好的做法是在将任何SQL转储到JPQL查询中之前阅读。JPQL!=SQL。

正如消息所说的那样,SOUNDEX不是有效的
JPQL
关键字/函数。如果您确实需要调用专有的
SQL
函数,则使用
函数
关键字(如果使用JPA 2.1)。更好的做法是在将任何SQL转储到JPQL查询中之前阅读。JPQL!=SQL。

查看Apache commons Metaphone utils。这些实用程序类在其soundex变量中转换字符串,因此您不必要求JPQL执行此操作,通过JPA使用专有函数是不好的。

查看Apache commons Metaphone utils这些实用程序类在soundex变量中转换字符串,因此您不必要求JPQL执行此操作,通过JPA使用专有函数是不好的