JPA和JSON运算符本机更新查询
我正试图在JPA中实现此查询: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,
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
应该已经是一个字符变化
或文本
,它们是可比较的。