Операция Transactional в Spring

235
13 сентября 2017, 11:58

У меня есть такой вот метод:

@Transactional
public void withdrawMoney(Withdrawal withdrawal) {
    // Если пользователь пытается снять отрицальную или нулевую сумму
    // -----------------------------------------------------------------------------------
    if (withdrawal.getValue() >= 0) {
        throw new RuntimeException("Wrong withdrawal value!");
    }
    // -----------------------------------------------------------------------------------
    // Создаем ссылки на персистентные объекты
    // -----------------------------------------------------------------------------------
    Account account;
    Currency currency;
    // -----------------------------------------------------------------------------------
    // К нам приходит не персистентный объект, поэтому вытаскиваем нужные объекты из базы
    // -----------------------------------------------------------------------------------
    try {
        account = accountRepository.findOne(withdrawal.getAccount().getUuid());
    } catch (Exception e) {
        throw new RuntimeException("Wrong account uuid");
    }
    try {
        currency = currencyRepository.findOne(withdrawal.getCurrency().getId());
    } catch (Exception e) {
        throw new RuntimeException("Wrong currency id");
    }
    // -----------------------------------------------------------------------------------

    // Если валюта на счете и валюта снятия не совпадают, то выкидываем исключение
    // -----------------------------------------------------------------------------------
    if (!account.getCurrency().equals(currency.getName())) {
        throw new RuntimeException("Wrong currency!");
    }
    // -----------------------------------------------------------------------------------
    // Вычитаем нужную сумму и сохраняем изменения в объекте
    // -----------------------------------------------------------------------------------
    account.setValue(account.getValue() - withdrawal.getValue());
    accountRepository.save(account);
    // -----------------------------------------------------------------------------------
    // Кладем персистентные объекты в withdrawal
    // -----------------------------------------------------------------------------------
    withdrawal.setAccount(account);
    withdrawal.setCurrency(currency);
    // -----------------------------------------------------------------------------------

    // Сохраняем операцию снятия денег в базе
    // -----------------------------------------------------------------------------------
    withdrawalRepository.save(withdrawal);
    // -----------------------------------------------------------------------------------
}

И две проблемы с ним. Первое, мне кажется, что я сильно перемудрил и все можно сделать гораздо проще. И второе - он не работает. Говорит, что все ок, но операция не выполняется. Как правильно воспользоваться аннтация Transactional в данном случае ?

READ ALSO
StringTokenizer и RegEx

StringTokenizer и RegEx

Делаю калькуляторДело дошло до разбиения на "слова"

315
Цикл “for” Java

Цикл “for” Java

Всем привет, как создать на вот этот код цикл? Я пробовал по такому типу

202