gpt4 book ai didi

spring - JPA Native 查询在 INSERT INTO VALUES 中将 List 参数的括号错误

转载 作者:行者123 更新时间:2023-11-29 14:27:36 25 4
gpt4 key购买 nike

所以我正在尝试为 JPA (JPQL) 编写一个 native 命名查询以一次性 INSERT 多行数据,并取回插入记录的所有 id(不冲突对主键具有唯一约束)。我正在使用 Postgres 数据库。

数据库看起来像这样:SELECT * FROM table;

id | sent
---+------
1 | f
(1 row)

我想要实现的是这个 PSQL 语句:

INSERT INTO table VALUES (1, false),(2, false) ON CONFLICT 不要返回 id;

应该返回:

id
---
2
(1 row)

所以我最初的想法是在 JPA 中进行原生查询:

@Repository
interface NotificationRepository : JpaRepository<Foo, Int> {

@Modifying
@Query("INSERT INTO Foo VALUES (:foos) ON CONFLICT DO NOTHING RETURNING id", nativeQuery = true)
fun addAllAndReturnInserted(foos: List<Foo>): List<Int>
}

它适用于列表中的一个值,但对于多个值,它将创建一个查询,如:

Hibernate:INSERT INTO Foo VALUES (?, ?) ON CONFLICT DO NOTHING RETURNING id

它抛出一个异常:

PSQLException: ERROR: column "sent" is of type boolean but expression is of type int

有没有办法将列表转换为单独的括号,例如 (?), (?) 而不是一个 (?, ?) ??

最佳答案

不,你的想法很好,但不适用于 Spring Data,因为:

  1. 列表参数扩展仅作为逗号分隔的数据值列表 (a, b, ...) 发生,而不是记录或行列表 (a), (b ), (...)
  2. 还不支持返回某些内容的数据修改语句(目前):https://jira.spring.io/browse/DATAJPA-1389

但是,至少可以解决此处所述的批处理问题:

关于spring - JPA Native 查询在 INSERT INTO VALUES 中将 List 参数的括号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56149740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com