【问题标题】:jpa postgres - query result difference with like on TEXT fieldsjpa postgres - 查询结果与文本字段上的类似
【发布时间】:2018-11-15 05:35:07
【问题描述】:

我正在尝试进行查询以搜索结构如下的项目:

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查询时,它返回0,但是如果我直接在postgres中执行生成的查询,我得到1。

有人知道这样的行为吗?

【问题讨论】:

    标签: sql postgresql jpa jpql


    【解决方案1】:

    我终于改成如下条件:

    lower(function('encode', (function('lo_get', cast(x.diagnosis as integer))), 'escape') like lower(concat('TEXT TO SEARCH', '%'))
    

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2012-05-19
      相关资源
      最近更新 更多