Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Откат транзакции в Spring / 12 сообщений из 12, страница 1 из 1
07.06.2018, 09:58
    #39657091
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
Всем привет. База postgresql 10. Есть метод:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
private void check(Account account){
        if(account.isExpired()){
            account.setStatus(EXPIRED);
            accountRepository.save(account);
            throw new CustomException("Account expired");
        }
 }
По умолчанию спринг делает роллбек для анчеккед эксепшн, мой CustomException extends RuntimeException, поидее этот метод не должен был сохранить в базе статус EXPIRED, но он сохранил и при этом выбросил эксепшн Account expired. Подскажите, почему так? Спасибо
...
Рейтинг: 0 / 0
07.06.2018, 10:05
    #39657101
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
А где транзакция начинается?
...
Рейтинг: 0 / 0
07.06.2018, 10:12
    #39657107
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
Локшин МаркА где транзакция начинается?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@Service
public class MyService {
    ....


    public void updateAccount(long id){
        ....
        Account account = accountRepository.findOne(id);
        check(account);
        ...
    }


private void check(Account account){
        if(account.isExpired()){
            account.setStatus(EXPIRED);
            accountRepository.save(account);
            throw new CustomException("Account expired");
        }
 }
}
Все происходит в одном и том же бине
...
Рейтинг: 0 / 0
07.06.2018, 10:40
    #39657136
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
Гайз, есть идеи какие-то? :)
...
Рейтинг: 0 / 0
07.06.2018, 11:05
    #39657179
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
updateAccount ловит это исключение или выбрасывает выше? Может дело в том что вызов this.check() не проксирован? Соотвесвтенно спринг ничего не знает про то что исключение выброшено.
...
Рейтинг: 0 / 0
07.06.2018, 12:06
    #39657243
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
JulTГайз, есть идеи какие-то? :)
Локшин Марк А где транзакция начинается?
Может после @Service добавить @Transactional?
...
Рейтинг: 0 / 0
07.06.2018, 12:19
    #39657267
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
BlazkowiczupdateAccount ловит это исключение или выбрасывает выше? Может дело в том что вызов this.check() не проксирован? Соотвесвтенно спринг ничего не знает про то что исключение выброшено.

+++
...
Рейтинг: 0 / 0
07.06.2018, 15:02
    #39657447
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
BlazkowiczupdateAccount ловит это исключение или выбрасывает выше? Может дело в том что вызов this.check() не проксирован? Соотвесвтенно спринг ничего не знает про то что исключение выброшено.
updateAccount() вызывается в контроллере, в случае ошибки, срабатывает ControllerAdvice:
Код: plaintext
1.
2.
3.
@ExceptionHandler(value = AccountException.class)
    public ResponseEntity<String> accountException(AccountException ex, HandlerMethod handlerMethod) {
        return new ResponseEntity<>(ex.getMessage(), INTERNAL_SERVER_ERROR);
    }
и все, никаких трай кечей нет нигде
...
Рейтинг: 0 / 0
07.06.2018, 15:24
    #39657473
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
как проверить проксируется ли сервисный класс? как это решить?
...
Рейтинг: 0 / 0
07.06.2018, 15:25
    #39657479
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
А где конфиг хоть какой-нибудь? Раз @Transactional нет, то должен же быть какой-нибудь конфиг? Просто по умолчанию транзакшионал методы вроде с get начинаются. Короче - конфиг в студию.
...
Рейтинг: 0 / 0
07.06.2018, 15:27
    #39657483
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
JulTкак проверить проксируется ли сервисный класс? как это решить?

просто перенесите код
if(account.isExpired()){
account.setStatus(EXPIRED);
accountRepository.save(account);
throw new CustomException("Account expired");
}
в updateAccount и прогоните тест для начала. А транзакция вообще стартует?
...
Рейтинг: 0 / 0
07.06.2018, 21:18
    #39657925
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откат транзакции в Spring
Разобралась, спасибо
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Откат транзакции в Spring / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]