Собственный SQL-запрос UPSERT для сбора как @Param метода репозитория JPAJAVA

Программисты JAVA общаются здесь
Anonymous
Собственный SQL-запрос UPSERT для сбора как @Param метода репозитория JPA

Сообщение Anonymous »

Мне нужно перебрать коллекцию Entities и применить UPSERT для каждого элемента атомарно. Как я это вижу - просто нужно отправить эту коллекцию в SQL-запрос с помощью SpEL.
Я знаю, что я могу перебирать коллекцию с помощью кода Java и отправлять сущности один за другим, но это будет не так атомарно, как я хочу осознать. (Или я чего-то не понимаю).
Я написал такой запрос

Код: Выделить всё

DO
$do$
BEGIN
FOR entity IN :#{#entitiesCollection}
LOOP
INSERT INTO entity_table AS e (id,
index,
enum_field,
version,
is_active)
VALUES (nextval('entity_id_seq'),
:entity.index,
:entity.enum_field.name(),
:entity.version,
:entity.is_active)
ON CONFLICT (index) DO UPDATE SET field_value = :entity.field.getValue(),
version     = :entity.version,
is_active   = :entity.isActive
WHERE (e.index = :entity.index)
AND ( (e.version < :entity.version)
OR ((e.is_active  :entity.isActive) AND (e.version = :entity.version)) );
END LOOP;
END
$do$
для моего метода репозитория

Код: Выделить всё

@Query(nativeQuery = true, value = "......")
void upsertCollection(@Param("entitiesCollection") List entitiesCollection);
но получил исключение

Код: Выделить всё

QueryException: Named Parameter Not Bound : entity.version
Я понимаю — ошибка в SpEL ссылается на @Param, но я не могу найти решение.
Буду признателен за вашу помощь!

Подробнее здесь: https://stackoverflow.com/questions/787 ... ory-method

Вернуться в «JAVA»