jpa postgres - 查询结果与 TEXT 字段上的 like 不同
jpa postgres - query result difference with like on TEXT fields
我正在尝试进行查询以搜索结构如下的项目:
IssueCategory
--* Issue
(一对多)
使用以下 JPQL
select count(z) from IssueCategory z join z.issues x
where
lower(cast(function('lo_get', cast(x.diagnosis as integer)) as text)) like lower(concat('TEXT TO SEARCH', '%'))
其中诊断是 Issue
的带有 @Lob
注释的字符串字段,映射为 postgres 中的文本字段:
CREATE TABLE issues (
...
diagnosis text,
...
)
此查询产生以下查询
select count(issuecateg0_.id) as col_0_0_
from issue_categories issuecateg0_
inner join issues issues1_ on issuecateg0_.id=issues1_.category_id
where lower(cast(lo_get(cast(issues1_.diagnosis as int4)) as text)) like lower(('TEXT TO SEARCH'||'%'))
显然,"TEXT TO SEARCH" 最初是作为参数传递给查询的。
问题是:当我执行 JPQL 查询时,它 returns 0,但是如果我直接在 postgres 中执行生成的查询,我得到 1。
有人知道这样的行为吗?
我最后改成了以下条件:
lower(function('encode', (function('lo_get', cast(x.diagnosis as integer))), 'escape') like lower(concat('TEXT TO SEARCH', '%'))
我正在尝试进行查询以搜索结构如下的项目:
IssueCategory
--* Issue
(一对多)
使用以下 JPQL
select count(z) from IssueCategory z join z.issues x
where
lower(cast(function('lo_get', cast(x.diagnosis as integer)) as text)) like lower(concat('TEXT TO SEARCH', '%'))
其中诊断是 Issue
的带有 @Lob
注释的字符串字段,映射为 postgres 中的文本字段:
CREATE TABLE issues (
...
diagnosis text,
...
)
此查询产生以下查询
select count(issuecateg0_.id) as col_0_0_
from issue_categories issuecateg0_
inner join issues issues1_ on issuecateg0_.id=issues1_.category_id
where lower(cast(lo_get(cast(issues1_.diagnosis as int4)) as text)) like lower(('TEXT TO SEARCH'||'%'))
显然,"TEXT TO SEARCH" 最初是作为参数传递给查询的。
问题是:当我执行 JPQL 查询时,它 returns 0,但是如果我直接在 postgres 中执行生成的查询,我得到 1。
有人知道这样的行为吗?
我最后改成了以下条件:
lower(function('encode', (function('lo_get', cast(x.diagnosis as integer))), 'escape') like lower(concat('TEXT TO SEARCH', '%'))