Итак, я пытаюсь написать собственный именованный запрос для JPA (JPQL) в INSERT
несколько строк данных за один раз и получить обратно все идентификаторы вставленных записей (которые не конфликтуют с уникальным ограничением наосновной ключ).Я использую базу данных Postgres.
База данных выглядит следующим образом: SELECT * FROM table;
id | sent
---+------
1 | f
(1 row)
Чего я хотел бы добиться, так это оператора PSQL:
INSERT INTO table VALUES (1, false),(2, false) ON CONFLICT DO NOTHING RETURNING 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: ОШИБКА: столбец «отправлено»имеет тип boolean, но выражение имеет тип int
Есть ли способ преобразовать список в отдельные perentheses, такие как (?), (?)
вместо одного (?, ?)
??