这个问题可能看起来很愚蠢,但我坚持执行这种查询:
UPDATE user SET productArr = ARRAY[ARRAY[2,2],ARRAY[3,2],ARRAY[1,3]] WHERE id = 1;
字符串
在@Query
Spring Data中。
我定义了我的repository方法如下:
@Modifying
@Query(value = """
UPDATE user
SET productArr = :productArr WHERE id = :userId
""", nativeQuery = true)
void updateProductArr (@Param("productArr") String productArr, @Param("userId") Long userId);
型
我设置String productArr="ARRAY[ARRAY[2,2],ARRAY[3,2],ARRAY[1,3]]"
错误是:
org.postgresql.util.PSQLException: ERROR: column "productArr" is of type text[] but expression is of type text
型
我尝试将productArr
的类型从String更改为String[]
或List<String>
,但没有成功。
我也尝试了这个解决方案:UPDATE user SET productArr = REPLACE(:productArr,'"','') WHERE id = :userId
但结果相同。
请注意,当我在数据库控制台上运行该查询时,它运行得很好。提前感谢您的帮助。
2条答案
按热度按时间ocebsuys1#
使用此查询更新数据时:
字符串
Postgres会自动将整数数组转换为字符串数组,因为据我所知,
productArr
字段的类型为text[]
您可以使用以下正确的SQL查询过滤此字段:
型
或者是
型
在你的 Spring 项目中,你有两种方法可以做到这一点。
1.输入参数使用数组类型,不要使用字符串类型
1.您可以对输入参数使用字符串类型,但应该在本机查询中强制转换类型。
举例来说:
型
并用途:
型
xfyts7mz2#
您的问题是由PostgreSQL数组类型和Spring Data查询的
productArr
参数之间的类型不匹配引起的。要解决这个问题,请将方法签名中productArr
参数的类型修改为String[]
,并在查询中使用::text[]
强制转换显式定义参数类型。这保证了更新查询的有效运行。