春季靴子上的本机查询:混合?参数和其他形式(例如?1)不支持1



我在带有postgresql/postgis的春季启动JPA上运行一个本机查询。

查询在PostgreSQL上运行良好:

WITH data AS (SELECT '{ "type": "Point", "coordinates": [102.0, 0.5]
     }'::jsonb AS fc) 
UPDATE dopigp.disciplinare_aree SET area_da_validare=( 
SELECT 
  ST_Union(ST_AsText(ST_GeomFromGeoJSON(feat->>'geometry'))) AS geom 
FROM ( 
  SELECT  
    CASE  
        WHEN fc ? 'features' THEN jsonb_array_elements(fc->'features') 
        WHEN fc ? 'geometry' THEN (fc) 
        ELSE jsonb_build_object('geometry', fc) 
    END  
    AS feat 
  FROM data 
) AS f 
) WHERE id_disciplinare=251 

在弹簧靴上给我错误:混合?参数和其他形式,例如?1不支持

@Transactional
@Modifying
@Query(value = "WITH data AS (SELECT (?2)\:\:jsonb AS fc)n" + 
        "UPDATE dopigp.disciplinare_aree SET area_da_validare=(n" + 
        "SELECTn" + 
        "  ST_Union(ST_AsText(ST_GeomFromGeoJSON(feat->>'geometry'))) AS geomn" + 
        "FROM (n" + 
        "  SELECT n" + 
        "   CASE n" + 
        "       WHEN fc ? 'features' THEN jsonb_array_elements(fc->'features')n" + 
        "       WHEN fc ? 'geometry' THEN (fc)n" + 
        "       ELSE jsonb_build_object('geometry', fc)n" + 
        "   END n" + 
        "   AS featn" + 
        "  FROM datan" + 
        ") AS fn" + 
        ") WHERE id_disciplinare=(?1) n",
        nativeQuery = true)
void upload(Integer idDisciplinare, String geoJSON);

您必须逃脱?在案例语句中,因为这是参数占位持有人,但您必须使用您必须使用?:

 WHEN fc ??

似乎无法逃脱问号。因此,唯一的解决方案是创建一个自定义操作员来替换此处指向的问号,并在本机查询中使用它,而不是" "。。

相关内容

最新更新