like 子句 JPQL 中的参数
我正在尝试使用 like 子句编写 JPQL 查询:
LIKE '%:code%'
我想要 code=4 并发现
455 554 646 ...
我无法传递 :code = '%value%'
namedQuery.setParameter("%" + this.value + "%");
因为在另一个地方我需要 :value
未被 %
字符包裹。有什么帮助吗?
I am trying to write a JPQL query with a like clause:
LIKE '%:code%'
I would like to have code=4 and find
455 554 646 ...
I cannot pass :code = '%value%'
namedQuery.setParameter("%" + this.value + "%");
because in another place I need :value
not wrapped by the %
chars. Any help?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
如果您这样做
然后再这样做
,则值将不受“%”符号的影响。如果您需要在同一查询中的其他地方使用它,只需使用除 'code' 之外的另一个参数名称。
If you do
and then do
Then value remains free from the '%' sign. If you need to use it somewhere else in the same query simply use another parameter name other than 'code' .
我不会对所有查询使用命名参数。例如,在 JpaRepository。
为了解决这个问题,我使用 JPQL CONCAT 函数(此代码模拟 start with):
我在优秀的文档中找到了这项技术:http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs /manual/jpa_overview_query.html
I don't use named parameters for all queries. For example it is unusual to use named parameters in JpaRepository.
To workaround I use JPQL CONCAT function (this code emulate start with):
I found this technique in excellent docs: http://openjpa.apache.org/builds/1.0.1/apache-openjpa-1.0.1/docs/manual/jpa_overview_query.html
您可以使用 JPA LOCATE 函数 。
仅供参考: 上的文档我的热门 Google 搜索 的参数颠倒了。
You could use the JPA LOCATE function.
FYI: The documentation on my top google hit had the parameters reversed.
JPA 标准 API 中有一个很好的 like() 方法。尝试使用它,希望它会有所帮助。
There is nice like() method in JPA criteria API. Try to use that, hope it will help.
我不知道我是否迟到或超出范围,但在我看来我可以这样做:
I don't know if I am late or out of scope but in my opinion I could do it like:
使用
JpaRepository
或CrudRepository
作为存储库接口:Use
JpaRepository
orCrudRepository
as repository interface:只需省略 ''
Just leave out the ''
使用 JPQL 查询。
Use JPQL query.
只需使用
LIKE %:name%
也许您需要使用
UPPER()
不区分大小写just use
LIKE %:name%
maybe you need to use
UPPER()
for case insensitive