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