Массовое обновление MySQL успешно, но не отражается на всех - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть игра, в которой я использую (Spring, Hibernate и MySQL 5.7) в серверной части. В конце каждой игры я выполняю собственный запрос на массовое обновление баланса победителей. В большинстве игр обновление успешно выполняется для всех победителей, но в некоторых играх я сталкиваюсь с проблемой обновления баланса для большинства из них, за исключением одной или двух (случайных). Обновление не выдает ошибку , и, как уже было сказано, баланс большинства победителей успешно обновляется. Вот метод в моем DAO (я суммировал его) с родным query:

@Override
public Integer addAmountToPlayerBalance(List<Long> playerIds, Double amount, Long gameId) {
        try 
        {
            StringBuilder queryNative = new StringBuilder();
            queryNative.append("update game_player_user set balance = ifnull(balance,0) + :amount where id in (:playerIds)");


            Session session = teleEM.unwrap(Session.class);
            org.hibernate.Query query = session.createSQLQuery(queryNative.toString());
            query.setParameter("amount", amount);
            query.setParameterList("playerIds", playerIds);
            int numOfUpdatedRecords = query.executeUpdate();
            return numOfUpdatedRecords;
        } 
        catch (NoResultException e) 
        {
            return null;
        }
}

Примечания :

1) Я добавил код для возврата количества обновленных записей неделю назад, но с тех пор его не было в производстве. но, как я уже сказал, это иногда случается.

2) В список идентификаторов игроков входят все победители даже в играх, где возникает проблема.

3) Сумма двойная, но округленная до 2 знаков после запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...