Обновите таблицу, используя ArrayList, сделав один вызов БД - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу обновить несколько строк в таблице на основе ArrayList<> ниже в одном вызове БД с использованием Spring JPA.

CREATE TABLE phoneStatus (Status VARCHAR(1000) NOT NULL, Phone VARCHAR(100) NOT NULL)

[
    {
        "status": "Green",
        "phone": "2099028090"
    },
    {
        "status": "Red",
        "phone": "3099036070"
    }
]

Запрос метода - UPDATE phoneStatus SET status=?1 WHERE phone=?2

Операция - list.foreach(object -> repo.method(x.getStatus(), x.getPhone());

Это приводит к снижению производительности из-за нескольких БДобновления (~ 150).

PS : Пожалуйста, исправьте мою формулировку / вопрос, если я допустил ошибку.

РЕДАКТИРОВАТЬ

Для тех, кто спрашивает, как проходит транзакцияразмещено в БД, ниже приведена ссылка на Spring JPA.

@Transactional
@Modifying
@Query(value = "UPDATE phoneStatus SET status=?1 WHERE phone=?2", nativeQuery = true)
void updatePhoneStatus(String status, String phone);

1 Ответ

0 голосов
/ 08 ноября 2019

Похоже, вы используете spring-data-jpa? Попробуйте установить для свойства batch_size что-то разумное. Вы можете найти другие конфиги, связанные с партиями, лучшую документацию, чем я могу написать здесь.

spring.jpa.properties.hibernate.jdbc.batch_size=10

...