Т.е. адгоритм получается такой:
1) читаем сущности из БД
2) делаем проверки и модификации
3) пробуем сохранить, если получаем исключение, то в п.1
В идеале хотелось бы иметь что-то типа:
1) получили сущности из кэша
2) сделали изменения
3) попробовали записать, используя какие-то ограничители, типа: итоговое кол-во товара в базе не может быть меньше нуля,
а не просто версию ентити, потому что если на складе было 110 полотенец можно было бы завершить обе транзакции нормально.
4) в случае ошибки ( несоблюдение ограничений заданных в п.3 ) выкинуть исключение и показать пользователю сообщение о необходимости
скорректировать данные продажи.