У меня есть система пакетной обработки, которая объединяет счетчики успехов. Многие серверы выполняют агрегацию, одновременно обновляя одну строку в таблице. Я выполняю подготовленные операторы, используя hibernate, как это
SQL_UPDATE = "UPDATE STATS.COUNTS SET SUCCESSCOUNT = SUCCESSCOUNT + ? WHERE ID = ?"
update = session.connection().prepareStatement(SQL_UPDATE);
update.setLong(1, data.getSuccessCount());
update.setLong(2, data.getBatchId());
update.execute();
Было несколько проблем с параллелизмом, и было решено использовать пессимистическую блокировку, поскольку вероятность коллизии довольно высока. Как выполнить пессимистическую блокировку при использовании таких подготовленных операторов в спящем режиме.
SELECT...FOR UPDATE
, который заблокирует, как вы хотите. - person Boris the Spider   schedule 02.01.2014