首页 > 解决方案 > 在 spring-data 存储库方法中使用 postgesql 的函数,该函数采用数组类型的参数

问题描述

我正在使用一个@Modifyingspring-data 存储库更新查询,该查询利用 Postgresql 函数jsonb_set(...)来更新存储的 JSON 值上的特定节点。存储库方法如下所示

@Query(value = "UPDATE AutosavedEntityDAO ae " +
            "SET ae.json = jsonb_set(ae.json, '{myJsonNode}', to_jsonb(:json)) " +
            "WHERE ae.id=:id")
@Modifying
void updateNode(@Param("id") Long id, @Param("json") String json);

在我尝试更改存储库方法的签名并使path参数可配置之前,这工作得很好,例如:

@Query(value = "UPDATE AutosavedEntityDAO ae " +
            "SET ae.json = jsonb_set(ae.json, :path, to_jsonb(:json)) " +
            "WHERE ae.id=:id")
@Modifying
void updateNode(@Param("id") Long id, @Param("path") String[] path, @Param("json") String json);

根据 postresql 文档,jsonb_set签名如下 jsonb_set(target jsonb, path text[], new_value jsonb [, create_missing boolean])。该函数的第二个参数是 postgesql 的text[],看起来@Param("path") String[] path不能映射到text[]

path有没有办法通过spring存储库方法为参数提供动态值?任何已知的解决方法?

标签: postgresqlspring-data-jpaspring-data

解决方案


推荐阅读