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);
}
}