运算符不存在:record = postgres中的字符不同

问题描述

使用JPA本机查询执行以下查询时,我遇到错误

错误

ERROR: operator does not exist: record = character varying
  Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
  Position: 228

查询

select ar.adm_rule_id 
from adm_promo.adm_rule ar,adm_promo.adm_non_comp_rule ac,adm_promo.adm_rule_hier_level ah 
where ar.rule_type =? 
  and ar.sales_org_id=? 
  and (ac.promo_market_id,ah.level_id) in (?) 
  and ar.adm_rule_id=ac.adm_rule_id 
  and ar.adm_rule_id=ah.adm_rule_id 
  and ar.delete_f='N' 
  and (ar.eff_end_date>=(?) and ar.eff_start_date<=(?)) 
  and ar.dist_channel=?

但是当我在Postgresql中尝试时,我得到的是与实际输入相同的查询的结果 输入查询

select ar.adm_rule_id 
from adm_promo.adm_rule ar,adm_promo.adm_rule_hier_level ah 
where ar.rule_type =1 
  and ar.sales_org_id=1 
 and (ac.promo_market_id,ah.level_id) in ((9,63)) 
  and ar.adm_rule_id=ac.adm_rule_id 
  and ar.adm_rule_id=ah.adm_rule_id 
  and ar.delete_f='N' 
  and (ar.eff_end_date>=('2020-09-29') 
  and ar.eff_start_date<=('2020-10-17')) 
  and ar.dist_channel=1

我找不到确切的问题,团队请帮助我解决此问题。

解决方法

我怀疑这有问题: (ac.promo_market_id,ah.level_id) in (?)

根据错误提示尝试将其更改为: (ac.promo_market_id,ah.level_id) in (?::record)

,

从它说“位置228”这一事实来判断,然后滚动到查询的那个字符,就可以使您接近:

(ac.promo_market_id,ah.level_id) in ((9,63))

但是您的查询模板具有此

(ac.promo_market_id,ah.level_id) in (?)

很可能是您在此处提供了错误的数据。数据库驱动程序不太可能支持参数化的值列表(以匹配“ IN”子句)。您可能最终会得到一些带引号的文本,而Postgres将其视为“字符变化”,这当然是不匹配的。