У меня есть игра, в которой я использую (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 знаков после запятой.