You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JPA原生查询不支持PostgreSQL ARRAY函数问题求助

问题

我需要查询person表中authority_right字段(整数数组类型)**精确等于[1,2]**的人员ID,对应的SQL语句如下:

SELECT id
FROM person
WHERE authority_right = ARRAY[1,2]

这段SQL在数据库控制台执行完全正常,但在Spring应用中通过@Query注解执行时,ARRAY[1,2]部分触发验证错误:

  • 日志报错:expecting CLOSE_BRACKET, found ','
  • 编辑器提示:<expression>, <operator>, GROUP, HAVING or ORDER expected, got '{'

我尝试过INT{1, 2}等多种括号组合,均未解决问题,请问该如何处理?

解决方案

1. 启用原生SQL执行

Spring Data JPA的@Query默认使用JPQL解析,而JPQL不支持数据库原生的ARRAY[]语法。只需开启原生SQL模式,即可直接使用原始SQL:

@Query(value = "SELECT id FROM person WHERE authority_right = ARRAY[1,2]", nativeQuery = true)
List<Integer> findByAuthorityRightExact();

2. 动态绑定数组参数(推荐)

如果需要灵活传入不同的数组值,建议使用参数绑定的方式,避免硬编码:

@Query(value = "SELECT id FROM person WHERE authority_right = ?1", nativeQuery = true)
List<Integer> findByAuthorityRightExact(Integer[] authorityRights);

调用该方法时,传入new Integer[]{1,2}即可完成精确匹配。

3. JPQL兼容的数组匹配方式

若不想使用原生SQL,部分JPA实现(如Hibernate)支持通过类型转换函数处理数组:

@Query("SELECT p.id FROM Person p WHERE p.authority_right = CAST(:rights AS int[])")
List<Integer> findByAuthorityRightExact(@Param("rights") Integer[] rights);

内容的提问来源于stack exchange,提问作者stakeika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:22:38