JPA和JSON运算符本机更新查询

JPA和JSON运算符本机更新查询,json,postgresql,spring-boot,jpa,jsonb,Json,Postgresql,Spring Boot,Jpa,Jsonb,我正试图在JPA中实现此查询: UPDATE billing_log_criteria SET value = jsonb_set(value, '{cubPersonId}', '"12778269"') where value ->> 'cubPersonId' = '12778268'; 它与postgresql完美结合,但当我将其与JPA集成时,我得到以下错误: 原因:org.postgresql.util.PSQLException:错误:函数jsonb_集(jsonb,

我正试图在JPA中实现此查询:

UPDATE billing_log_criteria
SET value = jsonb_set(value, '{cubPersonId}', '"12778269"')
where value ->> 'cubPersonId' = '12778268';
它与postgresql完美结合,但当我将其与JPA集成时,我得到以下错误:

原因:org.postgresql.util.PSQLException:错误:函数jsonb_集(jsonb,未知,字符变化)不存在 提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换

下面是我尝试的查询

@Modifying(clearAutomatically=false)
@Transactional
@Query(value = "UPDATE billing_log_criteria "
        + "SET value = jsonb_set(value, '{cubPersonId}',  jsonb_set(value, '{cubPersonId}', :newId)) "
        + "where value ->> 'cubPersonId' = :oldId", nativeQuery = true)
void updateCubPersonId(@Param("newId") String newId,@Param("oldId") String oldId);
像这样打电话

String oldId = "12778269";
updateCubPersonId( "'\" 12778268l \"'",oldId);

psql
中,参数
'{cubPersonId}'
自动转换为
文本[]
。在JDBC中,情况并非如此,您需要明确,例如:

@Query(value=“更新计费记录\u条件”
+“SET value=jsonb_SET(值,{cubPersonId}::text[],jsonb_SET(值,{cubPersonId}::text[],to_jsonb(:newId::text))”
+“其中值->>‘cubPersonId’=:oldId”,nativeQuery=true)

上述代码不起作用:newId和=:oldId仍然存在问题扫描您添加到问题中的错误是什么?刚刚修复了函数
jsonb_集
的类型转换,但是参数
oldId
应该已经是一个
字符变化
文本
,它们是可比较的。