PostgreSQL中UNNEST(ARRAY[])未拆分数组仅返回带括号单行数据如何解决
问题根因
Spring Data JPA(Hibernate)向PostgreSQL传递List<String>类型参数时,会自动将其转换为数据库可识别的数组类型。原写法额外使用array[:myList]包裹参数,相当于把整个传入的数组作为新数组的单个元素,unnest展开后仅会生成1行,内容为整个列表拼接后的字符串,和预期不符。
解决方案
- 方案1(推荐,无需额外序列化参数):去掉多余的
array包裹,对传入参数显式转换为字符串数组类型后再调用unnest拆分,修正后的代码如下:
@Query(value = "INSERT INTO mydb.temp SELECT unnest(CAST(:myList AS text[]))", nativeQuery = true) public void findrows( @Param("myList") List<String> myList ) throws MDBServiceException;
- 方案2(基于JSON函数实现):提前在业务层将List序列化为标准JSON数组字符串(格式如
["A01","B01"])再传入,调用json_array_text_elements完成拆分,对应写法:
@Query(value = "INSERT INTO mydb.temp SELECT json_array_elements_text(CAST(:myList AS json))", nativeQuery = true) public void findrows( @Param("myList") String myListJson ) throws MDBServiceException;
以上写法执行后都会得到预期的逐行插入效果:
| id |
|---|
| A01 |
| B01 |
内容的提问来源于stack exchange,提问作者manoj
相关产品推荐
相关产品推荐

