Spring JPA: возможен запрос пакетной вставки с коллекциями с использованием SpEL?

Я хочу создать запрос на вставку в репозиторий, используя следующую функцию

      void insertValues(Iterable<Long> keys)

Запрос должен вставлять несколько строк, но изменяется только первичный ключ, остальные - константы;

Я пробовал со следующими запросами

      @Query(nativeQuery = true, value = "INSERT INTO my_table (id, col1, col2, col3) VALUES :#{[0].!['('+#this+',''val1'',''val2'',''val3'')']}" )

а также

      @Query(nativeQuery = true, value = "INSERT INTO my_table (id, col1, col2, col3) VALUES (:#{[0].![new Object[]{#this, 'val1', 'val2', 'val3'}]})" )

В то время как первое не удается, потому что все значение вставляется с подготовленным оператором как один VARCHAR, последнее не удается, потому что выражение SpEL завершается на первой закрывающей скобке (где я закрываю массив) вместо второй

Есть какой-либо способ сделать это?

1 ответ

Я не думаю, что это возможно. Используйте что-то вроде этого:

      interface MyRepo {
  @Query(nativeQuery = true, value = "INSERT INTO my_table (id, col1, col2, col3) VALUES (?, 'val1', 'val2', 'val3')" )
  void insertValue(long id);

  default void insertValues(Iterable<Long> keys) {
    keys.forEach(this::insertValue);
  }

}
Другие вопросы по тегам