我正在尝试使此查询在JPA中起作用:
UPDATE billing_log_criteria
SET value = jsonb_set(value, '{cubPersonId}', '"12778269"')
where value ->> 'cubPersonId' = '12778268';
它与postgresql完美配合,但是当我将其与JPA集成时,出现以下错误:
由以下原因引起:org.postgresql.util.PSQLException:错误:函数jsonb_set(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);
答案 0 :(得分:0)
在psql
中,自变量'{cubPersonId}'
自动转换为text[]
。在JDBC中,不是这种情况,您需要明确地声明,例如:
@Query(value = "UPDATE billing_log_criteria "
+ "SET value = jsonb_set(value, '{cubPersonId}'::text[], jsonb_set(value, '{cubPersonId}'::text[], to_jsonb(:newId::text))) "
+ "where value ->> 'cubPersonId' = :oldId", nativeQuery = true)