Spring JPA本机查询在插入值时将列表参数的括号放错了

Spring JPA本机查询在插入值时将列表参数的括号放错了,spring,postgresql,hibernate,jpa,kotlin,Spring,Postgresql,Hibernate,Jpa,Kotlin,因此,我试图为JPA(JPQL)编写一个本机命名查询,一次插入多行数据,并获取插入记录的所有id(与主键上的唯一约束不冲突)。我正在使用Postgres数据库 数据库如下所示:SELECT*fromtable id | sent ---+------ 1 | f (1 row) 我想要实现的是以下PSQL语句: 将冲突时的值(1,false)、(2,false)插入表中,不执行任何操作返回id 应返回: id --- 2 (1 row) 所以我最初的想法是用JPA进行本机查询: @存储库

因此,我试图为JPA(JPQL)编写一个本机命名查询,一次插入多行数据,并获取插入记录的所有id(与主键上的唯一约束不冲突)。我正在使用Postgres数据库

数据库如下所示:
SELECT*fromtable

id | sent
---+------
1  | f
(1 row)
我想要实现的是以下PSQL语句:

将冲突时的值(1,false)、(2,false)插入表中,不执行任何操作返回id

应返回:

id
---
2
(1 row)
所以我最初的想法是用JPA进行本机查询:

@存储库
接口通知存储库:JpaRepository{
@修改
@查询(“在冲突时插入Foo值(:foos)不执行任何操作返回id”,nativeQuery=true)
趣味addAllAndReturnInserted(foos:List):列表
}
它适用于列表中的一个值,但对于多个值,它将创建如下查询:

Hibernate:在冲突时插入Foo值(?),不执行任何操作返回id

它抛出了一个异常:

PSQLException:错误:“发送”列的类型为布尔,但表达式的类型为int


是否有一种方法可以将列表转换为单独的perenthese,如
(?),(?)
,而不是一个
(?,?)

,不,您的想法很好,但无法处理Spring数据,因为:

  • 列表参数扩展仅作为以逗号分隔的数据值列表
    (a,b,…)
    ,而不是记录或行列表
    (a),(b),(…)
  • 还不支持返回某些内容的数据修改语句(目前):
  • 但是,至少有一个解决分批问题的方法,如下所述:


    列表不能这样做。Hibernate不知道在本机查询中尝试为您拆分列表意味着什么。您可以让
    在冲突时插入表值(?),不执行任何操作返回id
    @coladict您对如何按照我的问题中所述构建查询还有其他建议吗?