Я знаю, что я могу перебирать коллекцию с помощью кода 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
Буду признателен за вашу помощь!
Подробнее здесь: https://stackoverflow.com/questions/787 ... ory-method