逃避JPQL中的角色

Pro*_*mer 4 jpa jpql

在JPQL中,什么是转义字符,我们可以用来转义字符,如"'"

例如:我正在做类似的事情

"......其中person.name ='安迪'"

这里工作正常

但当人名是安迪的时候,那么where子句变得像

"......其中person.name ='安迪''

并且它返回错误说

Mik*_*unu 5

它无法弄清楚您的字符串文字在哪里结束。规范中很好地说明了解决方案:

包含单引号的字符串文字由两个单引号表示,例如:'literal''s'。

在你的情况下意味着:

...where person.name='Andy''s'
Run Code Online (Sandbox Code Playgroud)


Nay*_*kar 5

下面是使用命名参数执行查询的示例代码.

Query query = entityManager.createQuery("SELECT p FROM Person p WHERE p.name LIKE :name" ); 

query.setParameter("name", personName);
Run Code Online (Sandbox Code Playgroud)

在这里,您可以传递字符串,personName其中可能包含特殊字符,如"Andy's".

此外,它看起来很干净,并且不需要在查询执行和更改搜索字符串之前检查参数.